Java 如何自动右键单击jtable并选择第一个JMenu项
我有一个swing应用程序,我们将json传递给textfield,然后单击load按钮,填充一个表 我能够通过以下代码加载json并自动选择整个表: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&
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。虽然你所说的是相关的。