2014-11-07 4 views
0

Что я делаю:Мой JTable не Обновление

orderPage панель содержит: кнопка, JTable (резюме)

myChild панель содержит: TextFields для приема входных данных от пользователя.

При нажатии кнопки открывается панель myChild (без закрытия orderPage) и запрашивает у пользователя некоторый ввод. То, что я хочу сделать, основано на данных, предоставленных пользователем, мой Jtable (summary) обновляется с новыми данными, чего не происходит.

Мой код:

public class orderPage extends javax.swing.JPanel { 
public static JTable summary = new JTable(); 
public static DefaultTableModel model = (DefaultTableModel) summary.getModel(); 

/** Creates new form orderPage1 */ 
    public orderPage() { 
     initComponents(); 
     tableContainer.setViewportView(summary); 
    } 

    public static void addItem(int itemId,String itemName,int price,int qty,int amt) 
    { 
     model.addRow(new Object[]{itemId,itemName,price,qty,amt}); 
    } 

Позвонив addRow метод (из orderPage) от детской панели, мой JTable не обновляется. Я делаю что-то неправильно? Любая помощь оценивается. Благодарю.

+0

Действительно ли вы используете метод addItem()? В какой момент ваш код не работает, когда вы запускаете отладчик? –

+0

Рассмотрите возможность использования [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer

ответ

0

Вы почти у цели. Строка добавляется, но таблица не отражает изменения. Чтобы увидеть новую добавленную строку, вам нужно обновить JTable. Вы можете сделать это, вызвав fireTableDataChanged(). Например:

public static void addItem(int itemId,String itemName,int price,int qty,int amt) 
{ 
    model.addRow(new Object[]{itemId,itemName,price,qty,amt}); 

    // now that the new row has been added, refresh the table to reflect this 
    model.fireTableDataChanged(); 
} 
+1

Нет, вам нужно будет вызывать методы 'fireXxx' из-за' DefaultTableModel' (или любой 'TableModel'),' addRow' уже делает это. Методы 'fireXxx' предназначены для внутреннего использования только для модели – MadProgrammer

+0

Моя ошибка. Я не понимал, что fireXXX фактически автоматически вызывается через обновление в DefaultTableModel. – colmulhall

Смежные вопросы