我正在制作一个带有两个按钮的弹出菜单的程序,其中一个应该关闭弹出菜单,但是我不知道该怎么做,并且谷歌搜索还不太顺利。
我尝试使用popup.hide()
,但是即使我尝试仅移动弹出窗口,菜单也不会返回。在这种情况下,还需要我放置一个SuppressWarning
,并且完全关闭它花了几秒钟。有更好的方法吗?
我不确定哪种代码是相关的,但是这是相关的按钮及其作用(我跳过了所有看起来不相关的GUI部分的创建,一切看起来都不错,我知道这些按钮在工作中): 包装测试;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
interface CustomButton {
JButton create();
void react(JPopupMenu popup, JFrame frame);
}
class ErrandsButton implements CustomButton {
private JButton errands = new JButton("Errands");
public JButton create() {
return errands;
}
public void react(JPopupMenu popup, JFrame frame) {
errands.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
popup.show(frame, 120, 65);
}
});
}
}
class Test {
static JFrame frame = new JFrame("List");
static CustomButton errands = new ErrandsButton();
static JButton cancelTask = new JButton("Cancel");
static JPopupMenu popup = new JPopupMenu();
static void cancelTask() {
cancelTask.addActionListener(new ActionListener() {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
popup.hide();
}
});
}
public static void main(String args[]) {
createInterface();
cancelTask();
errands.react(popup, frame);
}
static void createInterface() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
JPanel popup1 = new JPanel();
JPanel button = new JPanel();
popup1.add(cancelTask);
popup.add(popup1);
frame.add(popup);
button.add(errands.create());
frame.getContentPane().add(BorderLayout.CENTER, button);
frame.setVisible(true);
}
}
答案 0 :(得分:1)
使用popup.setVisible(true)和popup.setVisible(false)。
答案 1 :(得分:1)
frame.add(popup);
是问题所在。不要将JPopupMenu添加到容器中。而是使用setComponentPopupMenu。
或者,您可以自己添加一个MouseListener来完成工作,该MouseListener的mousePressed,mouseReleased和mouseClicked方法分别调用isPopupTrigger和show。 (在所有这三种方法中都是 vital -不同的平台具有不同的显示弹出菜单的条件。)
但是实际上,使用setComponentPopupMenu
更容易。