【问题标题】:JTable Right-Click popupmenu in NetbeansNetbeans 中的 JTable 右键单击​​弹出菜单
【发布时间】:2010-07-13 21:08:14
【问题描述】:

我想在 NetBeans IDE 中的 JTable 中添加一个右键弹出菜单(看起来很简单……哈哈)

我让它部分工作

  1. 向表单添加弹出菜单
  2. 向弹出菜单添加菜单项
  3. 转到 JTable 的属性
  4. 点击绑定标签
  5. 将 ComponentPopupMenu 值设置为我的弹出菜单

但这只是部分有效。 现在,当我右键单击表时,弹出菜单,但 JTable 中的选定行没有改变。所以在调用 menuitem 的 actionPerformed 时,我不知道点击了 JTable 中的哪一行。

我怎样才能得到这个?还是在 netbeans 中有更简单的方法来做到这一点?

我知道还有其他方法可以做到这一点(在代码中),但我更喜欢使用 netbeans GUI builder。

以前有人做过吗?

感谢您的帮助!

【问题讨论】:

    标签: java netbeans netbeans6.8


    【解决方案1】:

    为什么要依赖 IDE 为您生成代码?当您迁移到不同的 IDE 并且您必须学习如何为该 IDE 执行此操作时会发生什么?了解如何编写自己的代码,然后 IDE 无关紧要:

    table.addMouseListener( new MouseAdapter()
    {
        public void mouseReleased(MouseEvent e)
        {
            if (e.isPopupTrigger())
            {
                JTable source = (JTable)e.getSource();
                int row = source.rowAtPoint( e.getPoint() );
                int column = source.columnAtPoint( e.getPoint() );
    
                if (! source.isRowSelected(row))
                    source.changeSelection(row, column, false, false);
    
                popup.show(e.getComponent(), e.getX(), e.getY());
            }
        }
    });
    

    【讨论】:

    • 对于除了 GUI 之外的几乎任何东西我都同意你的观点,但是在代码中设计一个界面总是比通过拖放设计相同的界面要花费更长的时间。感谢您的代码示例,这两行实际上解决了我的问题。 JTable 源 = (JTable)e.getSource(); int row = source.rowAtPoint(e.getPoint());我不知道你可以从一个点得到一行。
    【解决方案2】:

    希望我可以为 Netbeans 回答这个问题......我希望这对某人有所帮助

    1. 在表单中添加一个弹出菜单(它在其他组件中)调用它 以 jPopupMenu 为例
    2. 向弹出菜单添加菜单项
    3. 转到 JTable 的属性(例如,称之为 jTableDataOrSomething)
    4. 单击绑定选项卡(或右键单击jTable Bind > 元素)
    5. 将 ComponentPopupMenu 值设置为我调用的 jPopupMenu

      接下来的步骤,

    6. 在属性中选择事件并转到 mouseReleased 将其设置为您的 jTableDataOrSomething(或右键单击表格,事件 > 鼠标 > mouseReleased)

      Netbeans 创建一个空函数并设置如下代码

      private void jTableDataOrSomethingMouseReleased(java.awt.event.MouseEvent evt) {
      if (evt.isPopupTrigger())
      {
          JTable source = (JTable)evt.getSource();
          int row = source.rowAtPoint( evt.getPoint() );
          int column = source.columnAtPoint( evt.getPoint() );
      
          if (!source.isRowSelected(row)) {
              source.changeSelection(row, column, false, false);
          }
          jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
      }
      }
      
    7. 创建为每个菜单项执行的 menuitem 操作

      然后在那里你可以使用:

          int[] rows = jTableDataOrSomething.getSelectedRows();
          for (int row : rows) {
              boolean j = true;
              try {
                  modelRow = jTableDataOrSomething.convertRowIndexToModel(row);
                  //do something with the selected rows...
      

    这需要多行选择并考虑排序/过滤。

    完成函数

        jTableDataOrSomething.repaint();
    

    享受

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多