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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить высоту таблицы JTable 
V
    Опции темы
koreyko
Дата 31.3.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, помогите, пожалуйста, вычислить высоту JTable в пикселях.
Код

table.getHeight()
 возвращает нуль

Пробовал получить высоту колонки и прибавить высоту заголовка:
Код

table.getRowHeight()*table.getRowCount()+table.getTableHeader().getHeight();


Однако  
Код

table.getTableHeader().getHeight()
 также возвращает нуль

Спасибо.

Это сообщение отредактировал(а) koreyko - 31.3.2012, 14:27
PM MAIL   Вверх
dorogoyIV
Дата 31.3.2012, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



надо, что бы таблица сначала появилась на экране, потом уже брать размеры
PM MAIL   Вверх
koreyko
Дата 1.4.2012, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо. Но дело в том, что таблица у меня располагается в split pane, и я хочу перед ее отображением подгонять высоту панели под размер таблицы. 

Другими словами, у меня есть дерево, каждый узел которого хранит данные. При выборе какого-то узла данные выводятся в верхней части вертикальной панели Split Pane в виде таблицы с переменным количеством строк. Необходимо, чтобы высота верхнего пространства сплит-панели подгонялась под высоту таблицы. Для этого я и решил вычислить высоту таблицы и жестко задать позицию разделителя панели. 

Может быть есть какие-то альтернативные решения задачи?

PM MAIL   Вверх
dorogoyIV
Дата 1.4.2012, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Цитата(koreyko @  1.4.2012,  00:19 Найти цитируемый пост)
я хочу перед ее отображением подгонять высоту панели под размер таблицы

это муторно, но возможно. никаких ограничений для расчета высоты таблицы я не вижу  smile 
т.е. тебе нужно взять высоту строки, умножить на количество строк, плюс высота головы таблицы.
забудь про getWidth()/getHeight()
используй только getPreferredSize().width/height
PM MAIL   Вверх
koreyko
Дата 2.4.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, getPreferredSize() сработал! 

Осталось еще несколько "лишних" пикселей - я подозреваю, что это рамка панели JScrollPane, куда вложена таблица. Вы не знаете, каким образом можно вычислить толщину border компонента?
PM MAIL   Вверх
dorogoyIV
Дата 3.4.2012, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class Main extends JFrame
{
 JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
 JTable table = new JTable(10, 5);
 private int bordersHeight = 0;

 public Main()
 {
  jsp.setTopComponent(new JScrollPane(table));
  jsp.setBottomComponent(new JPanel());

  jsp.setDividerLocation(getPreferredTableHeight() +
                         getBordersHeight(table));

  add(jsp);
 }

 private int getPreferredTableHeight()
 {
  int headerHeight = table.getTableHeader().getPreferredSize().height;
  int rowHeight = table.getRowHeight();
  int count = table.getRowCount();
  return headerHeight + rowHeight * count;
 }

 private int getBordersHeight(Component c)
 {
  if(c != null && c instanceof JComponent)
  {
   Border border = ((JComponent)c).getBorder();

   if(border != null)
   {
    bordersHeight += border.getBorderInsets(c).top +
                     border.getBorderInsets(c).bottom;
    System.out.println("\n" + c.getClass() + "\nborder: " +
                       border.getBorderInsets(c));
   }
   getBordersHeight(c.getParent());
  }
  return bordersHeight;
 }

 public static void main(String [] args)
 {
  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    Main main = new Main();
    main.setDefaultCloseOperation(3);
    main.setBounds(100, 100, 400, 300);
    main.setVisible(true);}});
 }
}

PM MAIL   Вверх
koreyko
Дата 9.4.2012, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, интересное решение. Вопрос закрыт

Это сообщение отредактировал(а) koreyko - 9.4.2012, 15:24
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.0683 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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