java - 将对象从 JDialog 传递回根框架

标签 java swing constructor jframe jdialog

假设我们有一个 JFrame frame包含两个 JPanel,buttonPaneldataPanel ,在此面板中有一个 JButton button 。单击时,button创建并显示 JDialog dialog在它自己的窗口中(像往常一样)。使用多个 JTextField 和一个提交按钮,JDialog dialog创建一个新对象 dataObject封装这些输入数据。如果我们希望我们的dataPanel主应用程序中的 JPanel frame显示此 dataObject ,应该如何dataObject是否正确传递到驻留在外部 JFrame 中的 JPanel?

在写这篇文章时,即使对我来说也很拗口,所以我会尝试澄清:

JFrame frame

  • JPanel dataPanel - 用于显示 JDialog 中创建的对象的数据
  • JPanel buttonPanel - 包含一个打开 JDialog 的按钮,将在其中输入一些信息,并使用所述信息我们的对象 dataObject已构建。

这里的目标是通过这个dataObject (及其组成字段)到 dataPanel要显示。处理这个问题最合适的方法是什么?我考虑将对象保留在 dataPanel 中static,然后从 JDialog 调用静态方法来添加新对象,但这似乎不是正确的做法。

一些指导?

最佳答案

很大程度上取决于程序的结构,包括对话框的行为方式:

  • 如果 JDialog 是模态的,并且在按下提交按钮时消失,那么解决方案很简单 - 在返回后从对话框相关的类中提取数据,这将是以下行代码就在显示对话框的位置之后。对话框的提交 JButton 监听器可以简单地使对话框不再可见。
  • 否则,如果 JDialog 是非模式,并且在按下提交按钮时消失,那么您可能希望将一个监听器附加到其窗口,我相信是一个 WindowListener,然后进行调用当监听器指示对话框已关闭或正在关闭时,代码提取信息。
  • 否则,如果 JDialog 是非模式,并且在按下提交按钮时不应该变得不可见,但您需要使用新数据更新调用程序,那么我将拥有调用类将 PropertyChangeListener 添加到对话框相关类上,以便对话框相关类可以通知任何已按下提交的监听器。此代码将位于对话框的提交 JButton 监听器中。
  • 我会给与对话框相关的类提供一个 public DataObject getDataObject() 方法,调用代码可以在对话框返回后调用该方法,从而允许显示对话框的类在需要时提取相关信息.
  • 无论您做什么,都没有理由使用静态字段,而且有很多理由不使用。我强烈建议您甚至不要考虑这一点。

例如模态对话框返回:

// caveat: code has not been tested by compilation or running. 
JButton myButton = new JButton(new AbstractAction("Show Dialog Button") {
  public void actionPerformed(ActionEvent evt) {
    MyDialogPanel myDialogPanel = new MyDialogPanel();
    JDialog myDialog = new JDialog(myJFrame, "My Dialog", 
            ModalityType.APPLICATION_MODAL);
    myDialog.add(myDialogPanel);
    myDialog.pack();
    myDialog.setLocationRelativeTo(myJFrame);
    myDialog.setVisible(true);

    // dialog now returns and we can get the data
    // assuming that the wrapper object for your data 
    // is called "DataObject"
    DataObject dataObject = myDialogPanel.getDataObject();

    // and perhaps use it. Assume setDataObject is a method 
    // of the main GUI that displays the data object
    setDataObject(dataObject);
  }
});

关于java - 将对象从 JDialog 传递回根框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15855864/

相关文章:

java - Activity再次执行时如何刷新静态值

java - 在java中的方法内创建类实例的范围

java - 尝试通过 ShareAction Provider 共享图像时 Whatsapp 崩溃

未找到 javaee-endorsed-api-7.0

java - GridBag Constraint 仅通过类的构造函数添加,而不是通过方法添加

java - 构造函数调用必须是构造函数中的第一条语句

Java图形,使窗口闪烁不同的颜色

java - 我是否应该使用布局管理器,即使它看起来没有必要?

JavaScript 模块模式与构造函数中定义的方法的构造函数

java - 类的构造函数