【问题标题】:Accessing a JPanel on the JFrame from an opened JDialog从打开的 JDialog 访问 JFrame 上的 JPanel
【发布时间】:2015-01-06 18:32:51
【问题描述】:

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

问题是:

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

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

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

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

总结:如何在 JDialog 上的 JLabel 上设置 MouseReleaseEvent 时为 JFrame 上的 JPanel 设置 Visible(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;

}

【问题讨论】:

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


    【解决方案1】:

    这个 Jframe 有几个 JPanel,当用户登录应用程序时,这些 JPanel 设置为可见/不可见状态

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

    如何在 JDialog 上的 JLabel 上设置 MouseReleaseEvent 时为 JFrame 上的 JPanel 设置 Visible(true)

    您可以使用JDialoggetOwner() 方法来获取框架。一旦你有了对框架的引用,你就可以调用你的方法来改变CardLayout中的面板显示。

    【讨论】:

    • 感谢您的建议。我正在使用 Netbeans,因此 GroupLayout 已完成。我正在为 Dialog 类使用以下代码:public class NewModelDialog extends javax.swing.JDialog { public NewModelDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); } private void CreateMouseReleased(java.awt.event.MouseEvent evt) { NewModelDialog.this.dispose();} 而 JPanel 是在另一个类中定义的。我正在尝试在 MouseRelease 中使用 getOwner。是否可以在不更改布局卡的情况下做到这一点?
    • 不要在评论中发布代码。代码不可读。编辑问题并发布相关代码。 I am using Netbeans and hence the GroupLayout is done. - 不受 IDE 限制。
    • @camickr- 实际上我对编程(Java UI)非常陌生。我已经用代码编辑了这个问题。在在这里发布我的问题之前,我试图在互联网上找到很多东西。我无法发布完整的代码(隐私问题),我猜代码解释了我正在做的事情以及我必须从 JDialog 访问 JFrame 的问题。
    • I cannot post the complete code (privacy issues), - 您的问题是关于从 JDialog 获取父 JFrame。没有什么私人的。当您提出问题时,您会发布您的 SSCCE 来证明问题。它不必包含实际数据或任何私有数据。代码只是演示了这个概念。我建议你可以使用getOwner() 方法。你在哪里使用这个方法的代码?如果您需要更多帮助,请发布正确的SSCCE
    • @Camickr- 再次非常感谢。我将 JFrame 声明的修饰符更改为“静态”,现在可以从 JDialog 访问它。我用GeneralEditorUI.SymbolViewer.setVisible(true);
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多