2016-10-17 5 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に直接行を追加するのではなく、同じことをする最終的な中間オブジェクトを作成するのではありません。 –

答えて

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

あなたはJTableはTableModelの、ないのDefaultTableModelとして内部クラスを使用していることのような二つの配列を使用してテーブルを作成する場合。

あなたがDefaultTableModelを使用したい場合は、コードは次のようにする必要があります:あなたはJTableTableModelにアクセスすると今ではDefaultTableModelになり、あなたがaddRow(...)メソッドを使用することができます

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

+0

本当に働いて、ありがとう! –

1

DefaultTableModelを作成し、テーブルのモデルを設定する必要があります。 次に、作成したDefaultTableModelオブジェクトでaddRowを呼び出すことができます。

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

ありがとう、私は助けてくれてうれしいです! :) –

関連する問題