JTable行总计彩色编码标签

use*_*643 2 java code-reuse swing jtable rowcount

我有不同的形式,5个JTable中与行的任意数字,我想对每个一个会告诉我该表行的总数,改变颜色3秒时的行数变化的标签.如果递增,颜色应为绿色,如果递减则为红色.实现这一点的最佳方法是什么,这样我不需要在每个表单中复制太多代码?

kle*_*tra 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

  • `AbstractBean`是一个SwingX类.也许您应该使用`PropertyChangeSupport`重写此代码片段,尽管代码的目的很明确 (2认同)