2016-10-17 3 views
0

Я пытаюсь ввести строку в уже созданную таблицу, я нашел решение на этом веб-сайте, но это не работает для меня. Я извлек «JTable раздел кода» и создал новый класс, это следующий:Добавить данные в код раздела JTable, вопрос кастинга

public static void main(String[] args) { 
    String[] columnToken = {"No. consecutivo", "Token", "Lexema", "No. de linea"}; 
    String[] columnError = {"No. consecutivo", "Error", "No. de linea"}; 

    Object[][] datac1= {}; 
    Object[][] datac2= {}; 

    JTable tabTokens = new JTable(datac1, columnToken); 
    JTable tabError = new JTable(datac2, columnError); 

    JFrame frameTokens = new JFrame("JTable Tokens Display"); 
    JFrame frameError = new JFrame("JTable Errors Display"); 

    JPanel panel = new JPanel(); 
    panel.setLayout(new BorderLayout()); 

    JScrollPane tokenTabContainer = new JScrollPane(tabTokens); 
    JScrollPane errorTabContainer = new JScrollPane(tabError); 

    panel.add(tokenTabContainer, BorderLayout.CENTER); 
    frameTokens.getContentPane().add(panel); 

    panel.add(errorTabContainer, BorderLayout.CENTER); 
    frameError.getContentPane().add(panel); 

    for(int i=0; i<4; i++) { 
     DefaultTableModel token100 = (DefaultTableModel) tabTokens.getModel(); 
     token100.addRow(new Object[]{"Hola", 100, 196, "adios"}); 

     DefaultTableModel token101 = (DefaultTableModel) tabTokens.getModel(); 
     token101.addRow(new Object[]{"Hola", 100, 196, "adios"}); 

     DefaultTableModel token102 = (DefaultTableModel) tabTokens.getModel(); 
     token102.addRow(new Object[]{"Hola", 100, 196, "adios"}); 
    } 

    frameTokens.pack(); 
    frameTokens.setVisible(true); 
    //frameError.pack(); 
    //frameError.setVisible(true); 
} 

}

Появилась ошибка следующая:

Исключение в потоке «основной» java.lang.ClassCastException: javax.swing.JTable $ 1 нельзя отнести к javax.swing.table.DefaultTableModel

Я знаю, что это проблема кастинга, но это единственное решение, которое я основал в Интернете. Мне нужно вводить данные несколько раз в цикле, поэтому я не знаю другого «дизайна ввода», может ли кто-нибудь мне помочь? Спасибо!

+0

Почему бы просто не добавить строку непосредственно в tabTokens isntead, чтобы создать промежуточный объект, который заканчивается тем же. –

ответ

1
JTable tabTokens = new JTable(datac1, columnToken); 

При создании таблицы с помощью двух массивов, как, что JTable использует внутренний класс как TableModel, а не DefaultTableModel.

Если вы хотите использовать DefaultTableModel то код должен быть как:

DefaultTableModel model = new DefaultTableModel(data, column); 
JTable table = new JTable(model); 

Теперь, когда вы получаете доступ к TableModel из JTable это будет DefaultTableModel, и вы можете использовать метод addRow(...).

+0

Это действительно сработало, спасибо вам большое! –

1

Вам необходимо создать модель DefaultTableModel и установить для нее модель вашей таблицы. Затем вы можете вызвать addRow в созданном вами объекте DefaultTableModel.

public static void main(String[] args) { 
    String[] columnToken = {"No. consecutivo", "Token", "Lexema", "No. de linea"}; 
    String[] columnError = {"No. consecutivo", "Error", "No. de linea"}; 

    Object[][] datac1= {}; 
    Object[][] datac2= {}; 

    DefaultTableModel dtmTokens = new DefaultTableModel(datac1, columnToken); 
    DefaultTableModel dtmError = new DefaultTableModel(datac2, columnError); 

    JTable tabTokens = new JTable(dtmTokens); 
    JTable tabError = new JTable(dtmError); 


    JFrame frameTokens = new JFrame("JTable Tokens Display"); 
    JFrame frameError = new JFrame("JTable Errors Display"); 

    JPanel panel = new JPanel(); 
    panel.setLayout(new BorderLayout()); 

    JScrollPane tokenTabContainer = new JScrollPane(tabTokens); 
    JScrollPane errorTabContainer = new JScrollPane(tabError); 

    panel.add(tokenTabContainer, BorderLayout.CENTER); 
    frameTokens.getContentPane().add(panel); 

    panel.add(errorTabContainer, BorderLayout.CENTER); 
    frameError.getContentPane().add(panel); 

    for(int i=0; i<4; i++) { 
     dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"}); 

     dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"}); 

     dtmTokens.addRow(new Object[]{"Hola", 100, 196, "adios"}); 
    } 

    frameTokens.pack(); 
    frameTokens.setVisible(true); 
    //frameError.pack(); 
    //frameError.setVisible(true); 
} 
+0

спасибо! +1 Это было действительно полезно –

+0

Спасибо, я рад, что это было полезно! :) –

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

  • Нет связанных вопросов^_^