【问题标题】:Netbeans: How do I add a valueChanged listener to a JTable from the "design" GUI builder?Netbeans:如何从“设计”GUI 构建器向 JTable 添加 valueChanged 侦听器?
【发布时间】:2012-05-15 02:03:44
【问题描述】:

我右键单击 JTable 并在一个糟糕的组合中将一些代码插入到“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?

【问题讨论】:

  • 你到底在问什么?你的问题中没有问号。另外,作为旁注,condense your code a little
  • 如何通过 Netbeans 的“设计”视图将 valueChanged 监听器添加到 JTable?我在 GUI 构建器中没有看到该选项。
  • @Thufir:可以编译设计器源文件,但更改设计需要对应的.form文件。即便如此,重建也是一种痛苦。此外,没有任何要求您将设计器用于一切GroupLayout 也不是强制性的。这是电锯:用它来切割踏板,而不是雕刻棋子。
  • 好点。我喜欢用于 GUI 构建的“clicky”东西,但也许我会为我的 JTables 制作一个自定义 JPane,然后与设计师一起将它们添加到其他 JPane...?
  • @Thufir:没错,您可以将这样的面板添加到您的主布局中,如here 所示。更改面板的布局是了解不太常见的面板布局的好方法。

标签: java swing netbeans jtable netbeans-7


【解决方案1】:

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

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

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

private static class MyListener implements ListSelectionListener {

    @Override
    public void valueChanged(ListSelectionEvent e) {
        System.out.println(e.getFirstIndex());
    }
}

【讨论】:

    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 2013-02-12
      • 2014-01-30
      • 2012-08-20
      • 2011-09-22
      相关资源
      最近更新 更多