私はDefaultTableModelを使用してJTableを持つGUIを持っています。DefaultTableModel getValueAtメソッドは一見ランダムな結果を生成します
これらのインスタンス変数が宣言されている:
boolean doRun = false;
Class clazz;
Object obyect;
DefaultTableModel model;
ArrayList<String> al = new ArrayList();
テーブルは、このことによって移入され:
public StatusGUI(Object invokerObject) {
initComponents();
setLocationRelativeTo(null);
clazz = invokerObject.getClass();
obyect = invokerObject;
String line;
try {
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
if (!fields[i].isAccessible()) {
fields[i].setAccessible(true);
}
if (("" + fields[i].getType()).equals("class java.lang.String")) {
line = "String";
} else {
line = "" + fields[i].getType();
}
//Note: The first string in the Object is the description, which is left empty
model.insertRow(0, new Object[]{"", fields[i].getName(), line, "" + fields[i]});
}
} catch (Exception ex) {
ex.printStackTrace();
}
setVisible(true);
}
これは、(この場合)、変数に関する情報を含む5行を生成します。
私は次のコードで、ボタンを押して上のこれらの変数の情報を受信して格納したい:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
for (int i = 0; i < model.getRowCount(); i++) {
String description = "" + model.getValueAt(i, 0);
System.out.println("Description " + i + ": " + description);
String name = "" + model.getValueAt(i, 3);
if (!description.equals("") && description != null) {
al.add(description + "::" + name);
}
}
if (al.isEmpty()) {
JOptionPane.showMessageDialog(this, "No descriptions were added to any of the variables."
+ "\nThis could also be because no variables were found - if so, please see 'Help'");
} else {
new Thread(new SendThread(al, obyect)).start();
this.dispose();
}
}
5行のすべてに説明を追加する場合は、上記のコードは次のような出力を生成します。
Description 0: d1
Description 1: d2
Description 2: d3
Description 3: d4
Description 4:
場合のみ JTableの最初の行の記述を追加して、上記のコードは生成:
Description 0:
Description 1:
Description 2:
Description 3:
Description 4:
これは5行すべてを認識していることを示していますが、何らかの理由で行から読み取ったときに正しく表示されません。
私は1時間ほど同じコード行を見てきましたが、間違っていることは正直には分かりません。
ありがとうございます。 マイク。
バッテリーが含まれていません+1 – mKorbel
ありがとうございました:) しかし、なぜ私はコンストラクタでこれを行うことができないようですか?私は単純にstopCellEditing()を実行するとnullpointerを取得するようです。ステートメント –
次に、まだテーブルを作成していないか、isEditing()チェックを行っていないかのいずれかです。しかし、コンストラクタの中で編集を止めることは意味がありません。なぜなら、その時点でテーブルはまだ画面に表示されていないからです。 –