簡體   English   中英

使用JTable.setRowHeight無法更改行高

[英]Changing row height with JTable.setRowHeight not working

我正在一張桌子上有適合內容的行。 我將TableModelListener安裝到表模型,以便每當添加新行時,新添加的行的高度都會自動更改。 這是我的測試代碼:

final DefaultTableModel model = new DefaultTableModel(0, 1);
final JTable table = new JTable(model);
model.addTableModelListener(new TableModelListener() {
    @Override
    public void tableChanged(TableModelEvent e) {
        // TO DO: replace 100 with the actual preferred height.
        table.setRowHeight(e.getFirstRow(), 100);
    }
});

JButton button = new JButton("Add Row");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        model.addRow(new String[] {"abc"});
    }
});

我希望單擊“添加行”按鈕時,會將新行添加到表中,並且其高度為100像素,但這行不通-行高永遠不會改變。 奇怪的是,如果我將調用移動到按鈕的動作偵聽器,則JTable.setRowHeight方法可以正常工作:

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        model.addRow(new String[] {"abc"});
        talbe.setRowHeight(table.getRowCount() - 1, 100);
    }
});

絕對不能依賴此“解決方案”,因為可以從其他地方更改表模型。 我是否正確使用TableModelListener或這是一個錯誤?

如何使用EventQueue.invokeLater(...)

model.addTableModelListener(new TableModelListener() {
  @Override public void tableChanged(final TableModelEvent e) {
    // TO DO: replace 100 with the actual preferred height.
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        table.setRowHeight(e.getFirstRow(), 100);
      }
    });
  }
});

設置行高值后,您是否嘗試過使表格無效/重繪?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM