0

テキスト領域を使用してテーブルを配置し、テキスト領域を編集不可として設定すると、テーブルが編集不能になることを読みました。

しかし、私がそれを行うと、テキスト領域には含まれているテーブルが表示されず、代わりにテキスト領域自体が表示されます。

これが私がそれを行う方法です..

    JTable cart;
    DefaultTableModel model;
    JTextArea tArea = new JTextArea();

..

    model = new DefaultTableModel(data,columnName);
    cart = new JTable(model);
    tArea.add(cart);
    tArea.setEditable(false);
    scroll = new JScrollPane(tArea);
    scroll.setBounds(10,130, 700, 400);
    .
    .
    add(scroll);

どこで間違った部分を手に入れたのですか?

4

1 に答える 1

4

Guillaume Polet がすでに指摘したように、JTextArea を使用して JTable の状態を設定/変更するのは不便であることに同意します。

要件に応じて、次のオプションを検討します。

テーブルを編集可能にしたくない場合は、テーブルの isCellEditable メソッドをオーバーライドできます。

JTable table = new JTable( model )
{
  @Override
  public boolean isCellEditable( int row, int column )
  {
    return false;
  }
};

または、ある種の NonEditableTable の JTable をサブクラス化します。このようにすると、どのようなモデルがこのテーブルに追加されても、テーブルが編集できなくなるという利点があります。編集可能な状態が表示されるデータに依存している場合、テーブルの状態を変更することはできなくなるため、これはまさに不利になる可能性があります。

この場合、(Guillaume Polet が既に述べたように) DefaultTableModel または AbstractTableModel を拡張するかどうかに関係なく、独自の種類の TableModel を実装し、そのクラスのメソッドをオーバーライドしてそこでの動作を制御することが望ましい場合があります。

class MyTableModel extends AbstractTableModel
{
  @Override
  public boolean isCellEditable( int rowIndex, int columnIndex )
  {
    if ( /*FILL IN YOUR REQUIREMENTS TO BE EDITABLE*/ )
     return true;

    return false
  }
}
于 2012-10-22T09:08:41.733 に答える