3

データベースからのデータを使用してスイング jtable を作成しました。Web アプリでは、通常、データをユーザーに表示し、一意のデータベース ID を html タグ属性として設定します。これにより、ユーザーが編集をクリックすると、javascript を使用して html タグ属性から要素の非表示のデータベース固有 ID を選択できます。 . そうすれば、ユーザーが編集したいデータがわかり、一意の主キーを使用してデータベースで更新できます。次に、swing を使用して Java で記述されたデスクトップ アプリでこれを行うにはどうすればよいでしょうか。より明確に言えば、同等のものを探しています。

<table>
<tr id=1 ><td>david</td></tr>
<tr id=2 ><td>peter</td></tr>
<tr id=3 ><td>Timothy</td></tr>
</table>

希望は明確です。ありがとう

4

2 に答える 2

4

バックアップTableModelするものにJTableは、好きなものを含めることができます。たとえば、次のようなオブジェクトを含めることができます

class User{
  public final int ID;
  public String name;
  public int age;
}

次に、特定の値のみをJTable

class MyTableModel implements TableModel{
  private List<User> users;
  @Override
  public Object getValueAt(int row, int column){
    if ( column == 0 ){
      return users.get( row ).name;
    }
  }
}

ただし、TableModelまだ完全なUserオブジェクトが含まれているため、必要な情報がすべて揃っています。

注: 上記のコードは、メソッドが欠落しているためにコンパイルされません.... 私が言いたいことを説明するためにここにいます

于 2012-08-07T10:44:04.900 に答える
2

同等のものは、AbstractTableModelによってサポートされるサブクラス インスタンスList<YourObject>です。行を編集するときは、テーブルから選択した行のインデックスを取得し ( JTable.getSelectedRow())、この行インデックスをモデルの行インデックスに変換し ( JTable. convertRowIndexToModel())、モデルにこの行の を要求しYourObject、ID を取得します。オブジェクトからYourObject直接。

詳細については、JTable チュートリアルを参照してください。

public class UserTableModel extends AbstractTableModel {

    private List<User> users;

    public UserTableModel(List<User> users) {
        this.users = new ArrayList<User>(users);
    }

    @Override
    public int getRowCount() {
        return users.size();
    }

    @Override
    public int getColumnCount() {
        return 1;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        if (columnIndex == 0) {
            return users.get(rowIndex).getName();
        }
        else {
            throw new IllegalArgumentException();
        }
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        if (columnIndex == 0) {
            return String.class;
        }
        else {
            throw new IllegalArgumentException();
        }
    }

    public User getUserAtRow(int rowIndex) {
        return users.get(rowIndex);
    }
}
于 2012-08-07T10:42:42.927 に答える