Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对类执行操作';使用IntelliJ Idea designer创建的对话框创建的s字段_Java_Intellij Idea - Fatal编程技术网

Java 如何对类执行操作';使用IntelliJ Idea designer创建的对话框创建的s字段

Java 如何对类执行操作';使用IntelliJ Idea designer创建的对话框创建的s字段,java,intellij-idea,Java,Intellij Idea,我很好奇如何使用IntelliJ IDEA内置的对话框设计器,因为我发现它是一个潜力巨大的选项,但我真的不知道如何使用它 让我们考虑使用设计器创建的两个类的桌面程序:主窗口< /代码>和主对话< /代码>。让我们假设MainWindow类已经具有显示简单表单所需的所有字段、组件等。然后在主窗口类中,我们有: JLabel label = new JLabel("This is default text"); JButton showDialog = new JButton("Show dialo

我很好奇如何使用IntelliJ IDEA内置的对话框设计器,因为我发现它是一个潜力巨大的选项,但我真的不知道如何使用它

让我们考虑使用设计器创建的两个类的桌面程序:<代码>主窗口< /代码>和<代码>主对话< /代码>。让我们假设

MainWindow
类已经具有显示简单表单所需的所有字段、组件等。然后在
主窗口
类中,我们有:

JLabel label = new JLabel("This is default text");
JButton showDialog = new JButton("Show dialog");
showDialog.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e) 
            {
                MainDialog dialog = new MainDialog ();
                dialog.pack();
                dialog.setVisible(true);
            }
        });
使对话框可见。设计器默认设计的
main对话框
类如下所示:

public class MainDialog extends JDialog {
private JPanel contentPane;
private JButton buttonOK;
private JButton buttonCancel;

public MainDialog() {
    setContentPane(contentPane);
    setModal(true);
    getRootPane().setDefaultButton(buttonOK);

    buttonOK.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            onOK();
        }
    });

    buttonCancel.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            onCancel();
        }
    });

// call onCancel() when cross is clicked
    setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            onCancel();
        }
    });

// call onCancel() on ESCAPE
    contentPane.registerKeyboardAction(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            onCancel();
        }
    }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
}

private void onOK() {
// add your code here
    dispose();
}

private void onCancel() {
// add your code here if necessary
    dispose();
}
}
现在我们还假设dialog类中有一个文本字段:

JTextField textField = new JTextField();
我正在从中获取一个文本,该文本将按标签显示在
main窗口中

由于我有一个默认创建的
onOK()
函数,我希望它能用
main对话框中的文本字段中键入的文本更新
main窗口中的标签

问题是:如果不在
main对话框中写入一行
MainWindow=newmainwindow
或创建
标签
static
,如何使用此模式对另一个类的字段执行操作?可能吗?我知道这可以做得更简单,但这也是一个简单的例子,我想用这个结构执行更复杂的操作。

是的,这是可能的

第一个选项:由于对话框是模态的,因此在主窗口中打开模态的代码将被阻止,直到对话框关闭。因此,您可以在模式中执行类似的操作:

public String getEnteredText() {
    return textField.getText();
}
在主窗口中:

dialog.setVisible(true);
myLabel.setText(dialog.getEnteredText());
或者(但我会使用第一个选项),您可以将主窗口或任何其他回调传递给对话框。例如:

MainDialog dialog = new MainDialog(this);
在对话框中:

private void onOK() {
    mainWindow.setLabelText(textField.getText());
    dispose();
}

我的建议是避免使用UI设计器。特别是如果您还不能编写它们自己生成的代码,并且您对Swing的工作原理没有深入的了解。

您的问题标题很有煽动性,不适合堆栈溢出格式,我建议更改标题以反映您的问题,以吸引更多的帮助。实际上我已经尝试了您的第一个选项,但这不是一个好方法。在该选项中,每当我关闭对话框时,无论我是按“确定”还是“取消”按钮,标签都会更新。Nów让我们假设我不是在更新标签,而是在询问是否从数据库中删除一个用户——尽管按下了按钮,但删除他是愚蠢的。顺便说一句,我可以自己编写设计器代码,但是使用它可以加快我的工作速度,比如3倍,所以如果我有一个工具,我想知道如何使用它然后在按下OK关闭对话框之前将布尔变量
okPressed
设置为true,然后使用
if(dialog.isOkPressed()){myLabel.setText(dialog.getEnteredText();}
。就这么简单。谢谢,我马上就来试试