Java - 使用文本区域将JTable设置为不可编辑

时间:2012-10-22 06:41:00

标签: java swing model jtable jtextarea

我已经读过我可以使用文本区域,其中我会将我的表格放到它,然后将文本区域设置为不可编辑,这将使该表不可编辑。

但是当我这样做时,文本区域不会显示它包含的表格,而只是显示文本区域本身。

这是我怎么做的..

    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);

我知道哪里出错了?

1 个答案:

答案 0 :(得分: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并覆盖该类中的方法来控制那里的行为,最好(如Guillaume Polet已经提到的)实现您自己的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
  }
}