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