Java 如何自动右键单击jtable并选择第一个JMenu项

Java 如何自动右键单击jtable并选择第一个JMenu项,java,swing,jtable,jpopupmenu,Java,Swing,Jtable,Jpopupmenu,我有一个swing应用程序,我们将json传递给textfield,然后单击load按钮,填充一个表 我能够通过以下代码加载json并自动选择整个表: resourceButton.doClick(); this.table.selectAll(); 现在,我想右键单击选中的表,然后从弹出菜单中选择第一个选项。有什么建议吗 我想自动化UI的这一特定部分: JMenuItem addToSiteMap = new JMenuItem("Add to site map&

我有一个swing应用程序,我们将json传递给textfield,然后单击load按钮,填充一个表

我能够通过以下代码加载json并自动选择整个表:

  resourceButton.doClick();
  this.table.selectAll();
现在,我想右键单击选中的表,然后从弹出菜单中选择第一个选项。有什么建议吗

我想自动化UI的这一特定部分:


    JMenuItem addToSiteMap = new JMenuItem("Add to site map");
    addToSiteMap
        .addActionListener(e -> IntStream.of(tab.getTable().getSelectedRows()).forEach(row -> {
          int index = (int) tab.getTable()
              .getValueAt(row, tab.getTable().getColumn("#").getModelIndex());
          HttpRequestResponse httpRequestResponse = this.httpRequestResponses.get(index);
          callbacks.addToSiteMap(httpRequestResponse);
        }));
现在,我想右键单击选中的表,然后从弹出菜单中选择第一个选项

弹出菜单包含
JMenuItem
s或
JMenu
s。无论哪种方式,具有实际操作的是
JMenuItem
s

JMenuItem
也是一个按钮。您已经在使用
resourceButton.doClick()
。您也可以使用
doClick
JMenuItem
进行编辑

例如:

public class TableTest {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());

            JTable table = new JTable(new Object[][] { { "something" } }, new String[] { "column" });

            JPopupMenu popupMenu = new JPopupMenu();
            JMenuItem menuItem = new JMenuItem("MenuItem");
            menuItem.addActionListener(e -> {
                System.out.println("Popup item clicked.");
            });
            popupMenu.add(menuItem);

            table.setComponentPopupMenu(popupMenu);

            frame.add(new JScrollPane(table), BorderLayout.CENTER);

            JButton button = new JButton("Click me to fire Popupmenu item");
            button.addActionListener(e -> {
                menuItem.doClick();
            });
            frame.add(button, BorderLayout.PAGE_END);

            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        });
    }
}
现在,我想右键单击选中的表,然后从弹出菜单中选择第一个选项

弹出菜单包含
JMenuItem
s或
JMenu
s。无论哪种方式,具有实际操作的是
JMenuItem
s

JMenuItem
也是一个按钮。您已经在使用
resourceButton.doClick()
。您也可以使用
doClick
JMenuItem
进行编辑

例如:

public class TableTest {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());

            JTable table = new JTable(new Object[][] { { "something" } }, new String[] { "column" });

            JPopupMenu popupMenu = new JPopupMenu();
            JMenuItem menuItem = new JMenuItem("MenuItem");
            menuItem.addActionListener(e -> {
                System.out.println("Popup item clicked.");
            });
            popupMenu.add(menuItem);

            table.setComponentPopupMenu(popupMenu);

            frame.add(new JScrollPane(table), BorderLayout.CENTER);

            JButton button = new JButton("Click me to fire Popupmenu item");
            button.addActionListener(e -> {
                menuItem.doClick();
            });
            frame.add(button, BorderLayout.PAGE_END);

            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        });
    }
}

您可以使用按钮来代替弹出菜单。您可以添加按钮并在其上编写操作侦听器,如下所示

button.addActionListener(e -> IntStream.of(this.getTable().getSelectedRows()).forEach(row -> {
      int index = (int) this.getTable()
              .getValueAt(row, this.getTable().getColumn("#").getModelIndex());
      HttpRequestResponse httpRequestResponse = this.httpRequestResponses.get(index);
      resourceTextField.setText(String.valueOf(index));
  callbacks.addToSiteMap(httpRequestResponse);
    }));


您可以使用按钮来代替弹出菜单。您可以添加按钮并在其上编写操作侦听器,如下所示

button.addActionListener(e -> IntStream.of(this.getTable().getSelectedRows()).forEach(row -> {
      int index = (int) this.getTable()
              .getValueAt(row, this.getTable().getColumn("#").getModelIndex());
      HttpRequestResponse httpRequestResponse = this.httpRequestResponses.get(index);
      resourceTextField.setText(String.valueOf(index));
  callbacks.addToSiteMap(httpRequestResponse);
    }));


会不会触发右键点击。因为doclick()将进行左键单击嗨,我已经编辑了我的问题。如果这有帮助的话,你可以查看一下吗you@YatinKanyal为什么不直接调用
addToSiteMap.doClick()
?我试过了,但什么也没发生。我错过了什么吗。这段代码有什么作用吗?HttpRequestResponse HttpRequestResponse=this.httpRequestResponses.get(索引);addToSiteMap(httpRequestResponse)@YatinKanyal如果这是一个繁重的操作-需要时间,是的,它会起作用。它会触发右键单击。因为doclick()将进行左键单击嗨,我已经编辑了我的问题。如果这有帮助的话,你可以查看一下吗you@YatinKanyal为什么不直接调用
addToSiteMap.doClick()
?我试过了,但什么也没发生。我错过了什么吗。这段代码有什么作用吗?HttpRequestResponse HttpRequestResponse=this.httpRequestResponses.get(索引);addToSiteMap(httpRequestResponse)@YatinKanyal如果这是一个繁重的操作-需要时间,是的,它起作用。使用弹出窗口的目的是允许用户从弹出窗口中选择操作。如果您总是想调用弹出窗口中的第一项,那么用户如何调用第二项或第三项?如果您只有一个项目,那么您不应该使用弹出窗口,因为用户不希望自动发生某些事情。相反,您应该在框架中添加一个按钮,这样当用户单击按钮时,将对所有选定项目执行操作。使用弹出窗口的目的是允许用户从弹出窗口中选择操作。如果您总是想调用弹出窗口中的第一项,那么用户如何调用第二项或第三项?如果您只有一个项目,那么您不应该使用弹出窗口,因为用户不希望自动发生某些事情。相反,您应该在框架中添加一个按钮,这样当用户单击该按钮时,将对所有选定的项目执行操作。这是我几小时前建议的。我想我可以发布一个答案,但我假设如果OP知道如何将ActionListener添加到JMenuItem,那么就知道如何将ActionListener添加到JButton。我正在自动化这些内容,因此我没有选择更改UI。虽然你说的是相关的。是的,这是我几个小时前建议的。我想我可以发布一个答案,但我假设如果OP知道如何将ActionListener添加到JMenuItem,那么就知道如何将ActionListener添加到JButton。我正在自动化这些内容,因此我没有选择更改UI。虽然你所说的是相关的。