您好我正在制作一个简单的桌面应用程序,我正在设计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;
}
答案 0 :(得分:1)
当用户登录应用程序时,此Jframe有几个JPanel设置为Visible / Invisible状态
您应该使用Card Layout
并让布局管理面板的可见性。阅读How to Use CardLayout上Swing教程中的部分,了解更多信息和示例。
如何在JDF上的JLabel上使用MouseReleaseEvent时,JFrame上的JPanel的setVisible(true)
您可以使用getOwner()
的{{1}}方法来获取相框。获得对框架的引用后,您可以调用更改JDialog
中面板显示的方法。