我正在使用Java构建Java Swing应用程序。我的JPanel
JTable
有TableModel
个自定义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}}可以拦截它并执行一些方法。
答案 0 :(得分:0)
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);