Я делаю программу, которая имеет всплывающее меню с двумя кнопками, одна из которых должна закрывать всплывающее меню, но я понятия не имею, как это сделать, и поиск в Google не прошел слишком хорошо.
Я пытался использовать 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);
}
}