繁体   English   中英

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

[英]Java - Setting JTable as uneditable using a text Area

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

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

这是我的方法

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

知道我弄错了什么吗?

正如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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM