我是Java的新手,所以请温柔哈哈。我的问题是这个...我已经习惯了C#,在那里制作多个项目并且拥有所有他们的......单击鼠标事件,转到一个方法可以解决控制它的问题等等。问题是,我无法弄清楚如何在Java中这样做。我有几个JTable,需要一个方法来处理tablemodellistener事件。
import javax.swing.event.*;
import javax.swing.table.TableModel;
public class SimpleTableDemo ... implements TableModelListener {
...
public SimpleTableDemo() {
...
table.getModel().addTableModelListener(this);
...
}
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
...// Do something with the data...
}
...
}
所以我尝试更改“table.getModel()。addTableModelListener(this);”
为:
table.getModel()。addTableModelListener([TableModelListener类型的MyMethod]);
但它不会编译。请提供一个完整的示例或非常好的提示。谢谢!
编辑:
我从这里得到了代码:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange
答案 0 :(得分:1)
Java事件处理(遗憾的是)不像C#事件处理那样工作。
所以
table.getModel()。addTableModelListener([MyMethod of type TableModelListener]);
不行。
使用Java 8和lambda表达式,上述语句不再成立。如果您的班级中的某个方法的签名与tableChanged(TableModelEvent)
TableModelListener
匹配,则可以写
private void tableChangedEventHandler(TableModelEvent evt) {
//do stuff
}
table.getModel().addTableModelListener(this::tableChangedEventHandler);
请注意,您不需要实现接口,并且方法名称不应与接口中方法的名称匹配。
现在问题,您需要在其他一个类中实现TableModelListener
,其唯一目的是处理事件,我们称之为MyTableModelListener
。之后,您可以在任何需要的地方实例化它
table.getModel().addTableModelListener(new MyTableModelListener());
或者如果你真的需要一种方法来处理事件,你可以单独使用
table.getModel().addTableModelListener(MyTableModelListener.getInstance());
答案 1 :(得分:1)