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。这样做的好处是,无论模型添加到此表中,您的表都将永远不可编辑。确切地说,这也可能是一个缺点,因为如果您的可编辑状态取决于它显示的数据,您将无法再更改表的状态。

在这种情况下,无论是扩展 DefaultTableModel 还是 AbstractTableModel 并覆盖该类中的方法以控制那里的行为,实现您自己类型的 TableModel 可能会更好(正如 Guillaume Polet 已经提到的)。

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 回答