2016-05-16 3 views
0

Следующего кода используются для установки строки и столбцы JTable:массивы данных в JTable

private void createUIComponents() { 
    ergebnisModel = (DefaultTableModel) setupColumnsAndRows(); 
    ergebnisTabelle = new JTable(ergebnisModel); 
    ergebnisTabelle.setFont(new Font("Arial", Font.PLAIN, 15)); 

    //ergebnisModel.setRowCount(0); 

    tabellenScroll = new JScrollPane(ergebnisTabelle); 

    vergleichPlotter = new Plotter(calculator, 450, 400, Plotter.GraphType.VERGLEICH); 
    stromPlotter = new Plotter(calculator, 180, 150, Plotter.GraphType.STROM); 
    spannungPlotter = new Plotter(calculator, 180, 150, Plotter.GraphType.SPANNUNG); 
    leistungPlotter = new Plotter(calculator, 180, 150, Plotter.GraphType.LEISTUNG); 
} 

private TableModel setupColumnsAndRows() { 
    DefaultTableModel ergebnisModel = new DefaultTableModel(); 
    ergebnisModel.addColumn("Größen"); 
    ergebnisModel.addColumn("R in Ohm"); 
    ergebnisModel.addColumn("XL in Ohm"); 
    ergebnisModel.addColumn("XC in Ohm"); 

    ergebnisModel.addRow(new String[] {"Widerstand", String.valueOf(calculator.getWiderstand()), 
      String.valueOf(calculator.calculateXL()), String.valueOf(calculator.calculateXC())}); 
    ergebnisModel.addRow(new String[]{"I1", String.valueOf(calculator.getSpannung()/calculator.getWiderstand()), null, null}); 
    ergebnisModel.addRow(new String[]{"I2", null, String.valueOf(calculator.getSpannung()/calculator.calculateXL()), null}); 
    ergebnisModel.addRow(new String[]{"I3", null, null, String.valueOf(calculator.getSpannung()/-calculator.calculateXC())}); 
    ergebnisModel.addRow(new String[] {null, null, null, null}); 
    ergebnisModel.addRow(new String[]{"P", String.valueOf(calculator.calculateP()), null, null}); 
    ergebnisModel.addRow(new String[]{"Q", String.valueOf(calculator.calculateQ()), null, null}); 
    ergebnisModel.addRow(new String[]{"S", String.valueOf(calculator.calculateS()), null, null}); 
    ergebnisModel.addRow(new String[]{"R Ges", String.valueOf(calculator.calculateGesWiderstand()), null, null}); 
    ergebnisModel.addRow(new String[]{"I Ges", String.valueOf(calculator.getGesamtstrom()), null, null}); 

    return ergebnisModel; 
} 

} где нуль представляет собой пустое пространство. Калькулятор - это сюрприз, мой калькулятор, который выполняет все математические функции. Он работает с числами, которые ранее были переданы через графический интерфейс.

Эта таблица является частью диалогового окна вывода. Теперь проблема, с которой я столкнулся, заключается в том, что после открытия диалога второй раз в течение того же сеанса с различным входом с первого экрана данные не обновляются. Он по-прежнему показывает расчеты, выполненные со старым вводом.

Это не может быть проблемой прохождения calculator объекта, так как другие компоненты (в Plotter экземпляров), опирающиеся на этом объекте всегда до

Где проблема?

И есть ли еще один-обычный способ ввода данных в таблицу?

EDIT

Я использую IntelliJ в GUI Builder, который использует XML-файлы, чтобы отметить состояние по componentbeans. Таким образом, некоторые компоненты (см. Выше) создаются вручную, а другие - данные XML-файлов.

ответ

2
model.fireTableDataChanged(); 

Не вызывайте метод напрямую. Ответственность за вызов метода при изменении данных несет модель.

после открытия диалога второй раз в течение того же сеанса с различным входом с первого экрана данные не обновляются.

Я предполагаю, что вы создаете новый JTable, но эта таблица просто сидит в памяти и на самом деле не добавлена ​​в область просмотра вашей панели прокрутки.

Не создавайте новую JTable и TableModel.

Вместо просто обновить модель с новыми данными:

model.setRowCount(0); 
model.addRow(...); 
... 
+0

Спасибо за ваш ответ, где именно, мне надо поместить в код, чтобы обновить данные? – Wecherowski

+0

Потому что я вижу, что вы имеете в виду, но где еще я могу разместить создание JTable? – Wecherowski

+0

Вы создаете JTable, когда добавляете все остальные компоненты в фрейм. После этого вы просто обновляете таблицу, очищая таблицуModel и добавляя новые строки данных в модель. – camickr