簡體   English   中英

從打開的JDialog訪問JFrame上的JPanel

[英]Accessing a JPanel on the JFrame from an opened JDialog

嗨,我正在制作一個簡單的桌面應用程序,並且正在設計UI。 我正在使用NetBeans進行快速設計。 我確實看到很多網站和博客都在尋找答案,但是找不到合適的答案。 我是UI設計的新手。 您的回答/建議將不勝感激。

問題是:

我在應用程序中只有一個JFrame。 該Jframe具有多個JPanel,當用戶登錄應用程序時,這些JPanel設置為“可見/不可見”狀態。 默認情況下,其中兩個面板設置為不可見狀態(我使用了將它們設置為False的Pre-Init Code)。

此JFrame上的用戶可以通過單擊此JFrame上的一個按鈕來打開JDialog。 (JFrame和JDialog在同一包下的單獨類中定義)

JDialog框打開后,用戶可以選擇一些選項(Jlabels),然后單擊“創建”按鈕。 (此創建按鈕是JDialog上的JLabel)。

用戶單擊打開的JDialog的“創建”按鈕后,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;

}

此Jframe具有幾個JPanel,當用戶登錄應用程序時,這些JPanel設置為“可見/不可見”狀態

你應該使用Card Layout ,讓布局管理面板的可見性。 閱讀Swing教程中有關如何使用CardLayout的部分, 獲取更多信息和示例。

如何在JDialog的JLabel上具有MouseReleaseEvent的同時為JFrame上的JPanel設置setVisible(true)

您可以使用JDialoggetOwner()方法獲取框架。 一旦有了對框架的引用,就可以調用更改CardLayout面板顯示的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM