Java在DefaultTableModel上创建监听器

问题描述 投票:1回答:1

我正在使用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可以拦截它并执行一些方法。

java swing jtable defaulttablemodel
1个回答
0
投票

好吧,想想我明白了:把你的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);
© www.soinside.com 2019 - 2024. All rights reserved.