从打开的JDialog访问JFrame上的JPanel

时间:2015-01-06 18:32:51

标签: java user-interface netbeans jframe netbeans-8

您好我正在制作一个简单的桌面应用程序,我正在设计UI。我正在使用NetBeans快速设计它。我确实看到很多网站和博客找到答案,但无法找到正确的答案。我是UI设计的新手。您的回答/建议将不胜感激。

问题是:

我在应用程序中有一个JFrame。此Jframe具有多个JPanel,当用户登录应用程序时,这些JPanel设置为Visible / Invisible状态。其中两个面板默认设置为不可见状态(我将Pre-Init Code设置为False)。

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

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

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

摘要: 在JDialog上的JLabel上有一个MouseReleaseEvent时,如何为JFrame上的JPanel设置setVisible(true)?

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

提前致谢。

JDialog类是:

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;

}

1 个答案:

答案 0 :(得分:1)

  

当用户登录应用程序时,此Jframe有几个JPanel设置为Visible / Invisible状态

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

  

如何在JDF上的JLabel上使用MouseReleaseEvent时,JFrame上的JPanel的setVisible(true)

您可以使用getOwner()的{​​{1}}方法来获取相框。获得对框架的引用后,您可以调用更改JDialog中面板显示的方法。