Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как построить следующий контрол 
V
    Опции темы
pathfinder
Дата 24.3.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 7
Всего: 10



Исправленный JTableRowHeader

Код

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.CellRendererPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class JTableRowHeader extends JPanel {

    public JTableRowHeader(JTable table) {
        this.table = table;

        rendererPane = new CellRendererPane();
        add(rendererPane);
        
        table.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                adjustPreferredSize();
                revalidate();
                repaint();
            }
        });
        
        adjustPreferredSize();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Rectangle clipBounds = g.getClipBounds();
        int rowMin = table.rowAtPoint(new Point(1, clipBounds.y));
        int rowMax = table.rowAtPoint(new Point(1, clipBounds.y+clipBounds.height));

        if (rowMin < 0) {
            rowMin = 0;
        }

        if (rowMax < 0) {
            rowMax = table.getRowCount()-1;
        }

        Rectangle cellRect = new Rectangle();
        cellRect.x = 0;
        cellRect.y = table.getCellRect(rowMin, 0, true).y;
        cellRect.width = getWidth();

        TableCellRenderer cellRenderer = table.getTableHeader().getDefaultRenderer();

        for (int i=rowMin; i<=rowMax; i++) {
            cellRect.height = table.getRowHeight(i);

            rendererPane.paintComponent(g, 
                    cellRenderer.getTableCellRendererComponent(table, i, false, false, i, 0),
                    this, cellRect);

            cellRect.y += cellRect.height;
        }

        rendererPane.removeAll();
    }

    private void adjustPreferredSize() {
        setPreferredSize(new Dimension(40, table.getPreferredSize().height));
    }

    /* DATA */
    JTable table;
    CellRendererPane rendererPane;
}

PM MAIL   Вверх
Ccoder
Дата 25.3.2011, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.2.2011

Репутация: нет
Всего: нет



Что-то он опять неработает у меня
я делаю
Код

    public MainFrame()
    {
        initComponents();
        setLocationRelativeTo(null);
        JTableRowHeader test = new JTableRowHeader(Table1);
    }

и ничего невижу.

В примере так неплохо, а может как-то повернуть ещё можно? Тоесть тут они выглядят так-же как и на верху

Это сообщение отредактировал(а) Ccoder - 25.3.2011, 04:17
PM MAIL   Вверх
pathfinder
Дата 25.3.2011, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 3.3.2010

Репутация: 7
Всего: 10



Что-бы JTableRowHeader отображался его необходимо добавить в JScrollPane.

Код

public MainFrame()
    {
        initComponents();
        setLocationRelativeTo(null);
        jScrollPane.setRowHeaderView(new JTableRowHeader(Table1));
    }

PM MAIL   Вверх
Ccoder
Дата 25.3.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 15.2.2011

Репутация: нет
Всего: нет



А во как оказывается.
Теперь всё работает, ура!  smile 
Немного нето, но наверно если постараться, то можно сделать что-бы они поворачивались.
Главное сам принцип я уловил.
pathfinder, спасибо за код. (поставьте пожалуйста кто-нибудь + за меня)

Это сообщение отредактировал(а) Ccoder - 25.3.2011, 20:33
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1197 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.