Имею класс, унаследованный от 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()?
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.
Что с этим делать? Есть два варианта:
Заменить JTable
. Положим, что таблица находится в panel1
//удаляем старую таблицу
panel1.remove(tab);
tab = new ...//создаем новую
panel1.add(tab);
Изменить значения в таблице 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]);
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть запрос на получение данных с джойном многих таблицНеобходимо отсортировать товары по приоритету поле int Но не у каждого товара есть...
Нужно сделать приложениеЕго суть такова: Есть микроконтроллер (TTL) - он подключается через USB к ПК
Разрабатываю приложение на android - ключевая задача: работа с базой данных
Пусть в консоли вводят {1, 2, 3, 4}, причем, я не знаю количество чисел, я хочу работать с этим, как с массивом целых чисел, но понятно , что я не могу...