【问题标题】:JTable row totals color coded labelJTable 行总计颜色编码标签
【发布时间】:2012-08-28 15:10:13
【问题描述】:

我有 5 个具有任意行数的不同表单上的 JTable,我希望为每个 JTable 设置一个标签,以显示该表中的总行数,并在行数更改时更改颜色 3 秒.如果增加,颜色应该变成绿色,如果减少,颜色应该变成红色。实现这一点的最佳方法是什么,以便我不需要在每个表单中复制太多代码?

【问题讨论】:

  • 如果 JTable 相同,您可以扩展 JTable 并覆盖您需要为其提供额外功能的方法。
  • @TheCat 不,您从不(接近 100% 的近似值)覆盖任何 JSomething。此外,表格本身与要求无关。

标签: java swing jtable code-reuse rowcount


【解决方案1】:

基本上,您将 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);
    }

}

【讨论】:

  • AbstractBean 是一个 SwingX 类。也许你应该用PropertyChangeSupport重写这段代码sn-p,尽管代码的目的很明确
  • @Robin .. 这是半伪代码 .. 有意为之。有罪没有提到这一点:)
猜你喜欢
  • 2014-11-27
  • 1970-01-01
  • 2017-02-05
  • 2013-04-02
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多