さまざまな形式で任意の行数の5つのJTableがあり、それぞれにラベルを付けて、そのテーブルの行の総数を表示し、行数が変わると3秒間色が変わるようにします。インクリメントする場合は色が緑になり、デクリメントする場合は赤になります。各フォームであまり多くのコードを複製する必要がないように、これを実装するための最良の方法は何でしょうか?
1 に答える
5
基本的に、TableModelListenerをJTableのモデルに追加し、変更イベントを受信したら、対応するラベルを必要に応じて更新します
いくつかのコード:
public class TableModelRowStorage
// extends AbstractBean // this is a bean convenience lass of several binding frameworks
// but simple to implement directly
implements TableModelListener {
private int rowCount;
public TableModelRowStorage(TableModel model) {
model.addTableModelListener(this);
this.rowCount = model.getRowCount();
}
@Override
public void tableChanged(TableModelEvent e) {
if (((TableModel) e.getSource()).getRowCount() != rowCount) {
int old = rowCount;
rowCount = ((TableModel) e.getSource()).getRowCount();
doStuff(old, rowCount);
}
}
protected void doStuff(int oldRowCount, int newRowCount) {
// here goes what you want to do - all in pseudo-code
// either directly configuring a label/start timer
label.setText("RowCount: " + newRowCount);
label.setForeground(newRowCount - oldRowCount > 0 ? Color.GREEN : Color.RED);
timer.start();
// or indirectly by firing a propertyChange
firePropertyChange("rowCount", oldRowCount, newRowCount);
}
}
于 2012-08-28T16:23:05.663 に答える