[英]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)
您可以使用JDialog
的getOwner()
方法獲取框架。 一旦有了對框架的引用,就可以調用更改CardLayout
面板顯示的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.