我右键单击了JTable并将一些代码插入到一个糟糕的kludge中的“post listeners code”中。
我没有看到添加
的选项table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
到JTable的“设计”视图中的“事件”。我确定有一种方法可以从设计视图中添加valueChanged(ListSelectionEvent evt),但是如何?
也许是bug?
行选择更改事件由ListSelectionModel生成 JTable,而不是JTable本身 - 因此事件无法呈现 组件检查器(作为JTable的事件)。必须处理此事件 手动完成,例如像:
jTable1.getSelectionModel().addListSelectionListener(
new javax.swing.event.ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
customRowSelectionEventHandler(evt);
}
}
);
虽然可能有一种方法可以在“蓝色”,“托管”代码之外获取JTable的ListSelectionModel?
答案 0 :(得分:5)
您可以在源代码的可编辑部分创建自己的ListSelectionListener
。您可以将监听器的实例添加到表jTable1
属性中类变量Post-init Code
的选择模型中:
jTable1.getSelectionModel().addListSelectionListener(new MyListener());
听众本身可能如下所示:
private static class MyListener implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
System.out.println(e.getFirstIndex());
}
}
答案 1 :(得分:2)
也许你可以延长InputVerifier
。
这并不是它的目的,但你可以根据自己的需要进行调整。
public class TableVerifier extends InputVerifier {
@Override
public boolean verify(JComponent input) {
assert input instanceof JTable : "I told you I wanted a table!";
JTable inputTable = (JTable) input;
int numberColumns = inputTable.getColumnCount();
int numberRows = inputTable.getRowCount();
for (int column = 0; column < numberColumns; column++) {
for (int row = 0; row < numberRows; row++) {
//DO YOUR STUFF
}
}
return true;
}
}