Netbeans中JTable右键弹出菜单

4
我想在NetBeans IDE中的JTable上添加右键菜单(这似乎是一项简单的任务...哈哈)。
我已经部分完成了以下步骤:
1.在表单上添加弹出菜单 2.向弹出菜单添加菜单项 3.进入JTable的属性 4.点击binding选项卡 5.将ComponentPopupMenu值设置为我的弹出菜单
但这只有部分起作用。现在,当我在表格上右键单击时,菜单弹出,但JTable中选定的行不会更改。因此,在调用menuitem的actionPerformed时,我不知道单击了JTable中的哪一行。
我该如何解决这个问题?或者在netbeans中是否有更简单的方法?
我知道还有其他的做法(通过代码),但我更喜欢使用netbeans GUI builder。
有人以前做过这个吗?
感谢您的帮助!
2个回答

11

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

5
除了 GUI 之外,几乎任何东西我都同意你的观点,但是在代码中设计接口总是比通过拖放设计相同的界面需要更长的时间。感谢您的代码示例,这两行代码实际上解决了我的问题。JTable source = (JTable)e.getSource(); int row = source.rowAtPoint( e.getPoint() );我不知道您可以从一个点获取一行。 - DRJTower

1

希望我能为Netbeans解答......我希望这能对某些人有所帮助。

  1. 在表单中添加一个弹出菜单(放在其他组件中),例如称为jPopupMenu
  2. 向弹出菜单添加菜单项
  3. 进入JTable的属性(例如称为jTableDataOrSomething),点击绑定选项卡(或右键单击JTable绑定>元素)
  4. 将ComponentPopupMenu值设置为我称之为jPopupMenu的值
  5. 接下来,
  6. 在属性中选择事件并转到mouseReleased,将其设置为您的jTableDataOrSomething(或右键单击表格,事件>鼠标>mouseReleased)
  7. Netbeans创建一个空函数并设置以下代码:
  8. 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());
    }
    }
    
  9. 为每个菜单项创建菜单项操作
  10. 然后你可以使用:

        int[] rows = jTableDataOrSomething.getSelectedRows();
        for (int row : rows) {
            boolean j = true;
            try {
                modelRow = jTableDataOrSomething.convertRowIndexToModel(row);
                //do something with the selected rows...
    
这个功能涉及多行选择和排序/筛选。请完成该函数。
    jTableDataOrSomething.repaint();

享受


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接