3

我右键单击 JTable 并将一些代码插入到“post listeners code”中,这是一个糟糕的组合。

我没有看到要添加的选项

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
  public void valueChanged(ListSelectionEvent evt) {

到 JTable 的“设计”视图中的“事件”。我确定有一种方法可以从设计视图中添加 valueChanged(ListSelectionEvent evt),但是如何?

也许这是一个错误

行选择更改事件是由 JTable 的 ListSelectionModel 产生的,而不是由 JTable 本身产生的——因此该事件不能在 Component Inspector 中呈现(作为 JTable 的事件)。处理此事件必须手动完成,例如:

jTable1.getSelectionModel().addListSelectionListener(
    new javax.swing.event.ListSelectionListener() {
        public void valueChanged(ListSelectionEvent evt) {
            customRowSelectionEventHandler(evt);
        }
    }
);

尽管也许有一种方法可以在“蓝色”、“托管”代码之外为 JTable 获取 ListSelectionModel?

4

2 回答 2

5

ListSelectionListener您可以在源代码的可编辑部分创建自己的。您可以将侦听器的实例添加到jTable1Post-init Code属性中类变量的选择模型中:

jTable1.getSelectionModel().addListSelectionListener(new MyListener());

侦听器本身可能如下所示:

private static class MyListener implements ListSelectionListener {

    @Override
    public void valueChanged(ListSelectionEvent e) {
        System.out.println(e.getFirstIndex());
    }
}
于 2012-05-06T07:16:33.723 回答
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;
    }
}
于 2012-05-06T05:35:34.877 回答