Java Netbeans中的JTable右键单击弹出菜单

Java Netbeans中的JTable右键单击弹出菜单,java,netbeans,netbeans6.8,Java,Netbeans,Netbeans6.8,我想在NetBeans IDE中将右键单击弹出菜单添加到JTable中(似乎是一项简单的任务…哈哈) 我让它在一定程度上发挥了作用 向窗体中添加弹出菜单 将菜单项添加到弹出菜单 转到JTable的属性 单击“绑定”选项卡 将ComponentPopupMenu值设置为my popupmenu 但这只是部分有效。 现在,当我右键单击表格时,会弹出菜单,但JTable中选定的行不会更改。因此,在调用menuitem的actionPerformed时,我不知道单击了JTable中的哪一行 我怎么能得到

我想在NetBeans IDE中将右键单击弹出菜单添加到JTable中(似乎是一项简单的任务…哈哈)

我让它在一定程度上发挥了作用

  • 向窗体中添加弹出菜单
  • 将菜单项添加到弹出菜单
  • 转到JTable的属性
  • 单击“绑定”选项卡
  • 将ComponentPopupMenu值设置为my popupmenu
  • 但这只是部分有效。 现在,当我右键单击表格时,会弹出菜单,但JTable中选定的行不会更改。因此,在调用menuitem的actionPerformed时,我不知道单击了JTable中的哪一行

    我怎么能得到这个?或者在netbeans中有更简单的方法来实现这一点吗

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

    以前有人这样做过吗


    谢谢你的帮助

    为什么要依赖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());
            }
        }
    });
    

    希望我能为Netbeans回答这个问题。。。我希望这能帮助别人

  • 将弹出菜单添加到表单(它位于其他组件中)调用它 例如JPOppMenu
  • 将菜单项添加到弹出菜单
  • 转到JTable的属性(例如,将其称为jTableDataOrSomething)
  • 单击绑定选项卡(或右键单击jTable Bind>elements)
  • 将ComponentPopupMenu值设置为我的jPopupMenu

    下一步

  • 在properties中,选择Events并转到MouseRelease,将其设置为jTableDataOrSomething(或右键单击表,Events>Mouse>MouseRelease)

    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());
    }
    }
    
  • 创建为每个菜单项执行的菜单项操作

    然后在那里,您可以使用:

        int[] rows = jTableDataOrSomething.getSelectedRows();
        for (int row : rows) {
            boolean j = true;
            try {
                modelRow = jTableDataOrSomething.convertRowIndexToModel(row);
                //do something with the selected rows...
    
  • 这需要多行选择并考虑排序/筛选

        jTableDataOrSomething.repaint();
    

    享受

    对于除了GUI以外的几乎所有东西,我都同意你的看法,但是用代码设计界面总是比通过拖放来设计相同的界面花费更长的时间。不过,感谢您的代码示例,这两行代码实际上解决了我的问题。JTable source=(JTable)e.getSource();int row=source.rowAtPoint(例如getPoint());我不知道你能从一个点上吵架。