从 Swing 中的 MenuItem 打开对话框并在关闭前验证该对话框
Opening a Dialog from a MenuItem in Swing and validating that dialog before closing
我对 UI 开发 Java 和 Swing 有点陌生。我想在单击 JMenuBar 中的项目时打开一个对话框,然后在关闭它之前验证该对话框(因此,除非用户输入满足特定条件,否则按 X 或 ok 按钮将不起作用)。
目前,我的项目结构如下:
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("Whosebug - 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 但我似乎无法将整个 it/get 整合到 运行。
如果我拿link里的例子,我怎么调用dialog?我想我不应该使用 JOptionPane,但每次我尝试以任何其他方式显示 JDialog 时,我都会收到“无法共享 Boxlayout”错误。
请帮助我将其集成到我的代码中。
首先,您需要向 DialogPanel
class 添加吸气剂。如果您希望验证在 idField
中键入的信息,您必须通过在 JtextField
上放置 ActionListener
来向此 class 添加代码。
public class DialogPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JTextField idField = new JTextField(20);
public DialogPanel() {
add(new JLabel("Insert something to validate here:"));
add(idField);
}
public JTextField getIdField() {
return idField;
}
public String getIdFieldString() {
return idField.getText();
}
}
那么,你的结果应该是这样的。
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) {
String string = dialog.getIdFieldString();
// Do your processing
}
}
}
我对 UI 开发 Java 和 Swing 有点陌生。我想在单击 JMenuBar 中的项目时打开一个对话框,然后在关闭它之前验证该对话框(因此,除非用户输入满足特定条件,否则按 X 或 ok 按钮将不起作用)。
目前,我的项目结构如下:
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("Whosebug - 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 但我似乎无法将整个 it/get 整合到 运行。 如果我拿link里的例子,我怎么调用dialog?我想我不应该使用 JOptionPane,但每次我尝试以任何其他方式显示 JDialog 时,我都会收到“无法共享 Boxlayout”错误。 请帮助我将其集成到我的代码中。
首先,您需要向 DialogPanel
class 添加吸气剂。如果您希望验证在 idField
中键入的信息,您必须通过在 JtextField
上放置 ActionListener
来向此 class 添加代码。
public class DialogPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JTextField idField = new JTextField(20);
public DialogPanel() {
add(new JLabel("Insert something to validate here:"));
add(idField);
}
public JTextField getIdField() {
return idField;
}
public String getIdFieldString() {
return idField.getText();
}
}
那么,你的结果应该是这样的。
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) {
String string = dialog.getIdFieldString();
// Do your processing
}
}
}