Java在DefaultTableModel上创建监听器

时间:2018-05-03 11:22:14

标签: java swing jtable defaulttablemodel

我正在使用Java构建Java Swing应用程序。我的JPanel JTableTableModel个自定义JPanel。现在我想知道是否可以注册一个envet然后如果在表模型中我开始这个事件,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。现在我重写JPanel方法,我希望在执行条件后我可以运行一个事件,包含我的TableModel的{​​{1}}可以拦截它并执行一些方法。

1 个答案:

答案 0 :(得分: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);