【发布时间】:2013-03-27 23:20:41
【问题描述】:
我在这里有一个小场景,可能是重复的。我有 JTable,我在其中显示一些数据,我有一个鼠标监听器,它监听表上的右键单击并显示一个带有一个菜单项的弹出菜单。我的目标是,当用户单击菜单项时,我从表中获取值并将它们输入到自定义对话框中,该对话框具有一些填充字段,这样用户就不必手动输入整个对话框,因为我会将表格中选择的值提供给对话框。但我的问题是 menuitem actionevent 没有办法理解这一点,因此我可以使用table.getRowAt()。我已经阅读了另一条评论(在这里查看https://stackoverflow.com/a/4122082/1788917),我被告知我可以将行号保存在一个变量中,然后菜单项的操作侦听器可以访问该变量。
我希望它看起来像这样
theScrollPane.getViewport().add(myJTable, null);
JMenuItem menuItem = new JMenuItem(clickMe);
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
menuItemActionPerformed(e);
}
});
MouseListener popupListener = new PopupListener();
popupMenu.add(menuItem);
myJTable.addMouseListener(popupListener);
protected void menuItemActionPerformed (ActionEvent e) {
// what to do here to get the table row data
// and send it to my custom dialog via it's constructor ???
}
// a simple nested class for the popup
class PopupListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
int row = myJTable.rowAtPoint(e.getPoint());
int selectedRow = myJTable.getSelectedRow();
// just to make sure the popup appears only where the row is
// selected
if (row == selectedRow) {
showPopup(e);
}
}
public void mouseReleased(MouseEvent e) {
int row = myJTable.rowAtPoint(e.getPoint());
int selectedRow = myJTable.getSelectedRow();
if (row == selectedRow) {
showPopup(e);
}
}
private void showPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
所以我的问题是,保存行号是我能做到这一点的唯一方法还是有更好的方法?
【问题讨论】:
-
请发布与您的问题相关的材料,而不是复制粘贴整个代码。
-
我什至没有使用我的代码,这只是为了突出我正在寻找的东西
-
为什么要在弹出窗口中进行编辑?您可以使
JTable行可编辑并在此处自行编辑。或者除了在弹出窗口中进行编辑之外,您还有其他事情要做吗? -
@Che 我有一个自定义对话框,让用户输入他的详细信息(姓名、电子邮件等),然后选择要预订的房间(使用套房、容量等过滤器)。但我还希望当他从表中选择房间时,我可以只向对话框提供房间详细信息,以便用户只填写他/她的个人详细信息。就是这样,房间表不可编辑!
-
@Che
Why to take a row and edit in the popup?,因为 JTables 视图可能被删除的列包含同步数据或唯一 ID 等,默认情况下这些列是不可见的,永远不会在 JTables 视图上可见
标签: java swing jtable mouseevent popupmenu