簡體   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