【发布时间】:2020-11-09 08:51:00
【问题描述】:
我对 Java 和 Swing 的 UI 开发有些陌生。我想在单击 JMenuBar 中的项目时打开一个对话框,然后在关闭它之前验证该对话框(因此,除非用户输入满足某些条件,否则按 X 或确定按钮将不起作用)。
目前,我的项目结构如下:
Window.java
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Window {
private static JFrame f;
public static void main(String[] args) {
SwingUtilities.invokeLater(Window::createAndShowGUI);
}
private static void createAndShowGUI() {
f = new JFrame("Stackoverflow - Testproject");
JMenuBar menubar = new JMenuBar();
JMenu j_menu_test = new JMenu("Test");
JMenuItem j_menuitem_clickme = new JMenuItem("Click me");
j_menu_test.add(j_menuitem_clickme);
j_menuitem_clickme.addActionListener(new Open_Dialog());
menubar.add(j_menu_test);
f.setJMenuBar(menubar);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
static class Open_Dialog implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
DialogPanel dialog = new DialogPanel();
int result = JOptionPane.showConfirmDialog(null, dialog, "Test", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
//do something
}
}
}
}
DialogPanel.java
中我的对话框内容import javax.swing.*;
public class DialogPanel extends JPanel {
private JTextField id_field = new JTextField(20);
public DialogPanel() {
add(new JLabel("Insert something to validate here:"));
add(id_field);
}
}
现在显然这还没有进行任何对话框验证。我一直在努力让它工作,我找到了a working example of dialog validation,但我似乎无法整合它/让整个事情运行起来。 如果我从链接中获取示例,我该如何调用对话框?我认为我不应该使用 JOptionPane 但每次我尝试以任何其他方式显示 JDialog 时都会收到“无法共享 Boxlayout”错误。 请帮我把它集成到我的代码中。
【问题讨论】:
-
一般情况下,X按钮被视为取消选项。
-
阅读 Stopping Automatic Dialog Closing 上的 Swing 教程部分。