0

Java Swing を使用してプログラミングを始めたばかりです。私は多くの Java Swing クラスのそれぞれにあまり詳しくなく、テーブルの作成に関してつまずきに遭遇しました。

私が作成している Java Swing プログラムにテーブルを追加する方法を見つけようとしています。docs.oracle.com を調べて調べてみましたが、テーブルの値にアクセスしようとするとエラーが発生します。現在何をしようとしているのか、どこにエラーがあるのか​​を示すのに役立つコードを含めます。

これは、テーブルとテーブル モデルを作成するための私のコードです (問題は、テーブル モデルが正しく機能していないことだと思います)。

        /*Create the Table Entry*/
        columnNames = new String[listoffields.size()+1];
        columnNames[0] = "Record Number";
        for(int a = 1; a < columnNames.length;a++){
            columnNames[a] = listoffields.get(a-1).getTitle();
        }
        int count = 1;
        data = new Object[numrecords][listoffields.size()+1];
        for(int a = 0; a < numrecords;a++){
            for(int b = 0; b < listoffields.size()+1;b++){
                if(b == 0){
                    data[a][b] = count;
                    count++;
                }
                else{
                    data[a][b] = "";
                }
            }
        }

        /* create the table */
        JTable table = new JTable(data,columnNames);
        table.setCellSelectionEnabled(true);
        table.setModel(new AbstractTableModel() {
            public String getColumnName(int col) {
                return columnNames[col].toString();
            }
            public int getRowCount() { return data.length; }
            public int getColumnCount() { return columnNames.length; }
            public Object getValueAt(int row, int col) {
                return data[row][col];
            }
            public boolean isCellEditable(int row, int col) {
                return (col >= 1);
            }
            public void setValueAt(Object value, int row, int col) {
                data[row][col] = value;
                fireTableCellUpdated(row, col);
            }
        });
        JScrollPane scrollPane = new JScrollPane(table);
        table.setFillsViewportHeight(true);

        /* addthe table to the JTable tableentry*/
        tabelentry.setLayout(new BoxLayout(ProjectFrame.tabelentry, BoxLayout.Y_AXIS));
        tabelentry.add(scrollPane);
        tabelentry.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

テーブルが表示され、各セルの空白の値を編集したら、セルを送信する送信ボタンをクリックします。ただし、次のエラーが発生します。

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
   at java.util.Vector.elementAt(Unknown Source)
   at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
   at Client.GUIComponents.ProjectFrame$1.submit(NameOfFile.java:LineNumber)

次のように送信しようとすると、エラーが発生します。

public void submit(){
   String recordvalues = ""; //contains a String representation of what I want to submit
   for(int a = 0; a < numberoffields;a++){
      for(int b = 0; b < numberofrecords;b++){
         if(a != 0){ //I want to skip the first column
            recordvalues = recordvalues  + (String) tabelentry.getModel().getValueAt(b, a) + ","; //The error is at this line in the code
         }
      }
   }
}

現在発生している問題と現在試したことの例を示すためにコードを提供しました。私の質問を一般化するために、テーブル モデル クラスを正しく記述して、テーブル内の各セルの値にアクセスできるようにする方法を考えています。どんな支援も役に立ちます。ありがとうございます!

4

2 に答える 2

2

私がすぐに考えたのは、あなたは 2 つの異なるテーブル モデルを作成しているということです。

JTable table = new JTable(data,columnNames);
table.setCellSelectionEnabled(true);
table.setModel(new AbstractTableModel() {...

new JTable(data,columnNames)実際にDefaultTableModelは、提供している情報に基づいて独自に作成しています。table.setModel(new AbstractTableModel() {...コードを削除してみる

関連するもう1つの問題は、方法がわからず、data宣言columnNamesされていることです。

詳細については、表の使用方法を参照してください。

更新しました

Hovercraft が指摘するもう 1 つの問題は、あるテーブルを別のテーブルに追加してから、間違ったモデルにアクセスすることです。

テーブルの作成はもっと似ているはずです...

tableEntry = new JTable(data,columnNames);
JScrollPane scrollPane = new JScrollPane(tableEntry );
tableEntry .setFillsViewportHeight(true);
// Don't forget to add the scroll pane to you view !!

次に、メソッドを送信すると、次のようになります...

public void submit(){
    String recordvalues = ""; //contains a String representation of what I want to submit
    TableModel model = tableEntry.getModel();
    for(int a = 0; a < model.getColumnCount();a++){
        for(int b = 0; b < model.getRowCount();b++){
            if(a != 0){ //I want to skip the first column
                recordvalues = recordvalues  + (String) model.getValueAt(b, a) + ","; //The error is at this line in the code
            }
        }
    }
}
于 2012-12-05T22:39:39.003 に答える
1
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

この例外は、の列サイズtableが 0 であることを意味します。これは、に列を追加していないためだと思いますTableModel

いくつか作成してTableColumn Column = new TableColumn();から、これらの列をtable

于 2012-12-05T22:49:29.110 に答える