Netbeans:如何从“设计”GUI构建器向JTable添加valueChanged侦听器?

时间:2012-05-06 01:03:36

标签: java swing netbeans jtable netbeans-7

我右键单击了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?

2 个答案:

答案 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;
    }
}