Обновление компонентов Swing

611
14 июня 2017, 01:15

Имею класс, унаследованный от JFrame:

public class tttt extends JFrame{
    private JTable tab;
    private JPanel panel1;
    private void createUIComponents() {//Custom Create для tab
        Object[][] data1 =  {{'1'}};
        Object[] data2 = {'2'};
        tab = new JTable(data1, data2);
    }
    public void CreateFrame(){
        setContentPane(panel1);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
    public void Refresh(){
        Object[][] data1 =  {{'9'}};
        Object[] data2 = {'9'};
        this.tab = new JTable(data1, data2);
    }
}

И вызывающий класс:

public class Main {
    public static void main(String[] args) {
        tttt Frame = new tttt();//создается окно с таблицей, заполненной '1'
        Frame.CreateFrame();
        Frame.Refresh();//вызывается метод, но форма никак не меняется
    }
}

upd:

private void $$$setupUI$$$() {
        createUIComponents();
        panel1 = new JPanel();
        panel1.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(2, 2, new Insets(0, 0, 0, 0), -1, -1));
        panel1.add(tab, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(150, 50), null, 0, false));
        table1 = new JTable();
        panel1.add(table1, new com.intellij.uiDesigner.core.GridConstraints(0, 1, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(150, 50), null, 0, false));
        table2 = new JTable();
        panel1.add(table2, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, new Dimension(150, 50), null, 0, false));
    }
    /**
     * @noinspection ALL
     */
    public JComponent $$$getRootComponent$$$() {
        return panel1;
    }

Cобственно, два вопроса: как обратиться к tab на форме и куда обращается this.tab в методе Refresh()?

Answer 1

tab ссылается на объект JTable. Проблема в том, что при каждом вызове new JTable создается новый объект, а старый объект не изменяется.

По коду, объект № 1:

Object[][] data1 =  {{'1'}};
Object[] data2 = {'2'};
tab = new JTable(data1, data2);

В приведенном коде не показано, как он потом добавляется в интерфейс, но судя по описанию он отображается во фрейме.

Объект № 2:

Object[][] data1 =  {{'9'}};
Object[] data2 = {'9'};
this.tab = new JTable(data1, data2);

Здесь создается новый объект. tab теперь ссылается на него. Но т.к. он не добавлен на панель/фрейм, то в интерфейсе отображается объект № 1.

Что с этим делать? Есть два варианта:

  1. Заменить JTable. Положим, что таблица находится в panel1

    //удаляем старую таблицу
    panel1.remove(tab);
    tab = new ...//создаем новую
    panel1.add(tab);
    
  2. Изменить значения в таблице tab. Если размерность таблицы не изменяется, то можно переписать все значения двойным циклом.

    for(int i=0; i<data1.length; i++) {
        for(int j=0; j<data1[i].length; j++) {
            tab.getModel().setValueAt(data1[i][j], i, j]);
        }
    }
    
READ ALSO
Объединение и сортировка в SQLite

Объединение и сортировка в SQLite

Есть запрос на получение данных с джойном многих таблицНеобходимо отсортировать товары по приоритету поле int Но не у каждого товара есть...

272
Java и USB передача данных - Java SE

Java и USB передача данных - Java SE

Нужно сделать приложениеЕго суть такова: Есть микроконтроллер (TTL) - он подключается через USB к ПК

370
Запутался в переопределениях методов java

Запутался в переопределениях методов java

Разрабатываю приложение на android - ключевая задача: работа с базой данных

425
Сканирование из консоли (java)

Сканирование из консоли (java)

Пусть в консоли вводят {1, 2, 3, 4}, причем, я не знаю количество чисел, я хочу работать с этим, как с массивом целых чисел, но понятно , что я не могу...

323