1 Востаннє редагувалося Lujok (20.10.2015 19:45:01)

Тема: Змінити ширину колонок таблиці jTable

Щоб змінити ширину колонок я використовую цей код (він прописаний в головному класі в методя main ()) :

jtable.getColumnModel().getColumn(0).setMaxWidth(20);   

Коли тільки запускаю програму він працює , ширина колонок така як я виставив.  Але коли я відкриваю іншу таблицю  (використовуючи ту ж саму модель таблиці) то зміни зникають і ширина таблиці така ж як і була за замовчуванням . Коли відкриваю таблицю яка за замовчуванням була то в ній вже теж колонки не такі як я виставив в коді.
Я пробував цей код вставляти в метод

getTableContents(String tableName) 

   який приймає імя таблиці і виводить її.  Але получив Exception . 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

якщо треба ще показати якийсь мій  код  то я добавлю .

2

Re: Змінити ширину колонок таблиці jTable

Але коли я відкриваю іншу таблицю  (використовуючи ту ж саму модель таблиці) то зміни зникають і ширина таблиці така ж як і була за замовчуванням .

Якщо Ви хочете підганяти розміри колонок в таблиці під розміри даних, то є пару варіантів:
1. Завжди при зміні даних (структури) таблиці потрібно перевстановлювати ширину колонок.
2. Якщо не хочеться бавитися з першим пунктом, скористайтеся JXTable з SwingX, там є метод, для автопідгонки ширини колонок в таблиці. http://replace.org.ua/topic/5230/

3 Востаннє редагувалося Lujok (21.10.2015 11:12:36)

Re: Змінити ширину колонок таблиці jTable

1. Завжди при зміні даних (структури) таблиці потрібно перевстановлювати ширину колонок.

Після кожного

  fireTableStructureChanged();

  написав
       

   jtable.getColumnModel().getColumn(0).setMaxWidth(5);

і запрацювало. А при додаванні/видаленні рядків і так працює , без   

   jtable.getColumnModel().getColumn(0).setMaxWidth(5);

.

4

Re: Змінити ширину колонок таблиці jTable

Lujok написав:

запрацювало

Вітаю  :)
TableCellRenderer

Lujok написав:

А при додаванні/видаленні рядків і так працює , без 

jtable.getColumnModel().getColumn(0).setMaxWidth(5);

Саме так, оскільки додаються нові або видаляються старі дані, а не виправляються дані.

5 Востаннє редагувалося Lujok (23.10.2015 21:24:18)

Re: Змінити ширину колонок таблиці jTable

fed_lviv написав:

TableCellRenderer

Щодо TableCellRenderer . Почав вивчати цю тему . Вдається виділяти певним кольором вибрану ячейку, ячейку з рядком та ячейку з колонкою .
в основному класі :

jtable.setDefaultRenderer(Object.class, new MyTableRenderer());

та :

public class MyTableRenderer  extends DefaultTableCellRenderer  {

    @Override
    public Component getTableCellRendererComponent(JTable jtable, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        
        Component cell = super.getTableCellRendererComponent( jtable,  value,  isSelected,  hasFocus,  row,  column);
        
        jtable.setRowSelectionAllowed(true);
        jtable.setColumnSelectionAllowed(false);
       
        if(isSelected) {
               cell.setBackground(Color.GREEN);

        }
         else {
               cell.setBackground(Color.WHITE);
        }
        return  cell;
    }

В залежності як виставити (true / false )   в     

 jtable.setRowSelectionAllowed(true);
jtable.setColumnSelectionAllowed(false);

Чи можливо зробити так щоб ячейка при виділені була, наприклад зеленого кольору ,а вся строка (колонка) сірого . Тобто не одним кольором а двома різними ?
Та може підкажете де почитати , подивитися про інші методи класу DefaultTableCellRenderer . Я шукав але мало
що знайшов .

6

Re: Змінити ширину колонок таблиці jTable

Swing. Руководство для начинающих Шилдт
Иван Портянкин. Swing. Эффектные пользовательские интерфейсы 2 издание
Але все ж таки рекомендую спробувати бібліотеку SwingX, якщо не помиляюся там э файна програмка-демка. І завантаживши ъъ побачете всю красу JXTable