Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 05.02.2011
Сообщений: 25
1

Определение размера JTable

18.09.2012, 17:21. Показов 2210. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть такой диалог:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class SaveDialog extends JDialog {
   
    private final JTable pagesPanel = new JTable();
    private JScrollPane scrollPane = new JScrollPane(pagesPanel);
 
    private void initComponent() {
        setSize(600, 500);
        
        GridBagLayout dialogLayout = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        setLayout(dialogLayout);
                
        Border b1 = BorderFactory.createTitledBorder(NbBundle.getMessage(SaveForm.class, "CTL_pagesPanelTitle"));
        scrollPane.setBorder(b1);
        c.weightx = 1.0;
        c.weighty = 1.0;
        c.fill = GridBagConstraints.BOTH;
        c.insets = new Insets(10, 10, 10, 10);
        c.anchor = GridBagConstraints.NORTHWEST;
        dialogLayout.setConstraints(scrollPane, c);
        add(scrollPane);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
          
        pagesPanel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        
        TableColumn tc = pagesPanel.getColumnModel().getColumn(0);
        TableCellRenderer headerRenderer = tc.getHeaderRenderer();
        Object value = tc.getHeaderValue();
        JLabel comp = (JLabel) headerRenderer.getTableCellRendererComponent(pagesPanel, value, false, false, -1, 0);
        int width1 = comp.getIcon().getIconWidth();
        tc.setPreferredWidth(width1);
 
        int width2 = pagesPanel.getWidth() - width;
        pagesPanel.getColumnModel().getColumn(1).setPreferredWidth(width2);
    }
}
Таблица имеет 2 колонки. Размер первой считается с помощью ее рендера. Хочу, чтобы вторая колонка занимала все остальное доступное пространство, но
Java
1
pagesPanel.getWidth()
возвращает 0. Пробовал использовать:
Java
1
2
pagesPanel.getBounds()
pagesPanel.getSize()
Они тоже возвращают нулевые размеры. Начал искать размеры у JScrollPane, но и там тоже нулевые размеры. Какие-то ненулевые значения появляются только у JFrame, поскольку я их указываю явно. Подскажите, в чем проблема? и как мне получить размер таблицы? не хотелось бы считать размеры, отталкиваясь от JFrame, потому что кроме этих двух компонент на форме лежит еще куча других.
Аааа, и еще...
Java
1
comp.getSize()
тоже имеет нулевые размеры, хотя она содержит иконку размером 18х18
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2012, 17:21
Ответы с готовыми решениями:

Изменение размера JTable
Hi ! есть JFrame главный (MDI контейнер) в нем два JInternalFrame в первом JInternalFrame...

Определение ячейки в JTable
Казалось бы простая задача...а нет.Хочу получить значение и номер ячейки которую выбрал...

Определение размера контекста
Здравствуйте, задали мне такую , нерешаемую для меня, задачу.( в программировании я не сильна)...

sh - Определение размера каталога
Народ помогите разобраться. Сейчас пишу скрипт sh и здесь возникла загвоздка: Надо определить...

3
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
18.09.2012, 18:43 2
А зачем Вы ставите auto_resize_off? Расчитывайте размер первой колонки, выставляйте ей preferred/minimum/maximum... и просто size в то, что расчитали. А вторая колонка автоматом займет остальное просранство.
0
1 / 1 / 0
Регистрация: 05.02.2011
Сообщений: 25
19.09.2012, 10:00  [ТС] 3
Спасибо, помогло )))
Но все же хотелось бы понять, почему размеры JTable и JScrollPane равны 0, и почему рендер заголовка колонки возвращает компонент (JLabel), размеры которого тоже равны 0?
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
19.09.2012, 12:00 4
Всё зависит от того, когда Вы эти размеры берете. Реально они выставляются только когда происходит раскладка окна, чаще всего это тогда, когда окно отображается. Вот показали - после этого можете получить размеры.

А с рендерерами ситуация еще сложнее. Эта компонента предназначена только для отрисовки. И ее размер устанавливается каждый раз перед отрисовкой нужной ячейки. Т.е. если у Вас таблица 4х5 и все ячейки отрисовываются одним рендерером - ему 20 раз будет выставлен размер.
0
19.09.2012, 12:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2012, 12:00
Помогаю со студенческими работами здесь

Определение размера PIPE
Здравствуйте! Поставлена задача - определить размер pipe для вашей операционной системы. Написал...

Определение размера массива
Код: template <class T,int N> int arr_sz(T (&arr)) {return N;} void sum(int a){cout<<a;};...

Определение размера структуры
RAD STudio 10.2 Описываем новый тип: typedef struct { WORD id; } DBHeader; При этом...

Определение размера файла
В общем есть функция,которая определяет размер файла в байтах: function GetFileSize(FileName:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru