2

さまざまな形式で任意の行数の5つのJTableがあり、それぞれにラベルを付けて、そのテーブルの行の総数を表示し、行数が変わると3秒間色が変わるようにします。インクリメントする場合は色が緑になり、デクリメントする場合は赤になります。各フォームであまり多くのコードを複製する必要がないように、これを実装するための最良の方法は何でしょうか?

4

1 に答える 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 に答える