从打开的 JDialog 访问 JFrame 上的 JPanel

Accessing a JPanel on the JFrame from an opened JDialog

您好,我正在制作一个简单的桌面应用程序,并且正在设计 UI。我正在使用 NetBeans 快速设计它。我确实看过很多网站和博客来寻找答案,但找不到合适的答案。我是 UI 设计的新手。您的 answers/suggestion 将不胜感激。

问题是:

我在应用程序中只有一个 JFrame。这个 Jframe 有几个 JPanel,当用户登录应用程序时,这些 JPanel 被设置为 Visible / Invisible 状态。默认情况下,其中两个面板设置为不可见状态(我将预初始化代码设置为 False)。

此 JFrame 上的用户可以通过单击此 JFrame 上的按钮之一打开 JDialog。 (JFrame 和 JDialog 在同一包下的单独 classes 中定义)

一旦打开 JDialog 框,用户就可以选择 select 一些选项(Jlabels)并单击“创建”按钮。 (此创建按钮是 JDialog 上的 JLabel)。

只要用户单击打开的 JDialog 的“创建”按钮,JDialog 就会关闭(我为此 JLabel 的 MouseReleaseEvent 使用了 Dialog.this.dispose()。) 这将关闭 JDialog。但是除了单击时关闭此 JDialog 之外,我还想将 JFrame 上 JPanel 的可见状态设置为 true。

总结:如何在 JDialog 上的 JLabel 上设置 MouseReleaseEvent 的同时为 JFrame 上的 JPanel 设置 Visible(true)?

我无法访问 JDialog 上 Jframe 的 JPanel class。 (如何访问 Jpanel 并使其在 Jrame 的 JLabel 上的 MouseEvent 上可见)

提前致谢。

JDialog class 是:

public class NewModelDialog extends javax.swing.JDialog {


public NewModelDialog(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
}

Create.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseReleased(java.awt.event.MouseEvent evt) {
            CreateMouseReleased(evt);
        }
    });
    getContentPane().add(Create, new org.netbeans.lib.awtextra.AbsoluteConstraints(624, 444, 40, 20));

    pack();
    setLocationRelativeTo(null);
}                          
private void initComponents() {

    Create = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setTitle("New JDialog");
    getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
Create.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseReleased(java.awt.event.MouseEvent evt) {
            CreateMouseReleased(evt);
        }
    });
    getContentPane().add(Create, new org.netbeans.lib.awtextra.AbsoluteConstraints(624, 444, 40, 20));

    pack();
    setLocationRelativeTo(null);
}
private void CreateMouseReleased(java.awt.event.MouseEvent evt) {                                     

    NewModelDialog.this.dispose();

}   
public static void main(String args[]) {



    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
                           NewModelDialog dialog = new NewModelDialog(new javax.swing.JFrame(), true);
            dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                @Override
                public void windowClosing(java.awt.event.WindowEvent e) {
                   dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

                }
            });
            dialog.setVisible(true);

        }
    });
    }
 public javax.swing.JLabel Create; }

JFrameClass 是:

public class GeneralEditorUI extends javax.swing.JFrame {


public GeneralEditorUI() {
    initComponents();
    setExtendedState(MAXIMIZED_BOTH);
}


private void initComponents() {


    SymbolViewer = new javax.swing.JPanel();


    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("JFrameClass");

    SymbolViewer.setBackground(new java.awt.Color(204, 204, 204));
    SymbolViewer.setPreferredSize(new java.awt.Dimension(36, 36));
    SymbolViewer.setVisible(false);

    javax.swing.GroupLayout SymbolViewerLayout = new javax.swing.GroupLayout(SymbolViewer);
    SymbolViewer.setLayout(SymbolViewerLayout);
    SymbolViewerLayout.setHorizontalGroup(
        SymbolViewerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(SymbolViewerLayout.createSequentialGroup()
            .addComponent(SymbolViewerLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGap(28, 28, 28)
            .addComponent(Close_SymbolViewer, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE))
    );
    SymbolViewerLayout.setVerticalGroup(
        SymbolViewerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(SymbolViewerLayout.createSequentialGroup()
            .addGroup(SymbolViewerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(Close_SymbolViewer)
                .addComponent(SymbolViewerLabel))
            .addGap(0, 85, Short.MAX_VALUE))
    );

}                       



public static void main(String args[]) {


    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new GeneralEditorUI().setVisible(true);
                        }
    });

}

public javax.swing.JPanel SymbolViewer;

}

This Jframe has several JPanel which are set to Visible /Invisible state when user logs the application

您应该使用 Card Layout 并让布局管理面板的可见性。阅读有关 How to Use CardLayout 的 Swing 教程部分,了解更多信息和示例。

How can I setVisible(true) for the JPanel on the JFrame while having a MouseReleaseEvent on a JLabel on JDialog

可以使用JDialoggetOwner()方法获取帧。引用框架后,您可以调用更改 CardLayout.

中面板显示的方法