3

内容に合った行を持つテーブルに取り組んでいます。新しい行が追加されるたびに、新しく追加された行の高さが自動的に変更されるように、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か、それともバグですか?

4

2 に答える 2

4

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);
      }
    });
  }
});
于 2012-07-10T06:28:19.110 に答える
1

行の高さの値を設定した後、テーブルを無効化/再描画しようとしましたか?

于 2012-07-10T06:12:28.513 に答える