Java создать слушатель на DefaultTableModel - PullRequest
0 голосов
/ 03 мая 2018

Я создаю приложение Java Swing с Java. У меня есть 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 и хочу, чтобы после выполнения условия я мог запустить событие, а JPanel, содержащий мой TableModel, мог его перехватить и выполнить какой-то метод.

1 Ответ

0 голосов
/ 03 мая 2018

хорошо, думаю, я понял: Добавьте вашу 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);
...