Java在DefaultTableModel上创建监听器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java在DefaultTableModel上创建监听器相关的知识,希望对你有一定的参考价值。

我正在使用Java构建Java Swing应用程序。我有我的JPanel有一个JTable与自定义TableModel。现在我想知道是否可以注册一个envet然后如果在表模型中我开始这个事件,JPanel拦截这个事件并执行一个方法。

这是我的TableModel

public class MyTableModelScontriniArticoli extends defaultTableModel {

    private static final String[] columnNames = {"Cod.Prod.", "Descrizione", 
            "Qta", "Prezzo cad.", "% Sconto", "Prezzo Tot"};

    public HashMap<String, ArticoliScontrini> mappaArticoli = 
            new HashMap<String, ArticoliScontrini>();

    private static NumberFormat decimalFormatter2 = new DecimalFormat("#,##0.00");

    private Integer numeroPz = 0;

    public Boolean gestisciTagliaColore;

    public MyTableModelScontriniArticoli() {

    }

    public MyTableModelScontriniArticoli(boolean gestisciTagliaColore) {
        super(columnNames, 1);    // 10 righe iniziali (vuote)
        mappaArticoli = new HashMap<String, ArticoliScontrini>();
        this.gestisciTagliaColore = gestisciTagliaColore;
    }

    public MyTableModelScontriniArticoli(String[] columnnames2, int i) {
        super(columnnames2, 1);    // 10 righe iniziali (vuote)
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        super.setValueAt(aValue, rowIndex, columnIndex);
        if (columnIndex == 2) {
            //TO DO METHOD 2
            //LAUNCH EVENT
        } else if (columnIndex == 3) {
            //TO DO METHOD 3
            //LAUNCH EVENT
        } else if (columnIndex == 4) {
            //TO DO METHOD 4
            //LAUNCH EVENT
        } else if (columnIndex == 6) {
            //TO DO METHOD 6
            //LAUNCH EVENT
        }
    }

}

我的tableModel延伸DefaultTableModel。现在我重写setValueAt方法,我希望在执行条件后我可以运行一个事件,包含我的JPanelTableModel可以拦截它并执行一些方法。

答案

好吧,想想我明白了:把你的TableModel添加到你的表中

 jTable1.setModel(new MyTableModelScontriniArticoli());

然后将TableModelListener添加到表中。它将对'fireTableChanged'调用作出反应。

jTable1.getModel().addTableModelListener(new TableModelListener() {
    @Override
    public void tableChanged(TableModelEvent e) {
          //do some event stuff
  });

你的setValueAt方法:

  switch(columnIndex){
        case 2: /*do your stuff*/ break;
        case 3: /*do your stuff*/ break;
        case 4: /*do your stuff*/ break;
    }

 //this.fireTableChanged(new TableModelEvent(this, rowIndex,rowIndex,columnIndex)); 
 fireTableCellUpdated(rowIndex, columnIndex);

以上是关于Java在DefaultTableModel上创建监听器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 defaulttablemodel 上添加行

Java Swing 如何使用DefaultTableModel交替刷新JTable?

如何将DefaultTableModel对象的数据放入DefaultTableModel的子类中

如何在 DefaultTableModel/JTable 中合并单元格?

即使查询数据,DefaultTableModel 也是空的

应该在哪里定义我的可选 DefaultTableModel 方法?