是否可以从JFrame
类获取父JPanel
个对象
实际上我正在尝试使用NetBeans创建GUI.GUI有一个框架和两个面板
1)登录面板(有两个文本字段和按钮)
2)第二小组
加载JFrame时,我最初在其中添加LoginPanel
。
public ParentJFrame() { //in constructor
initComponents();
this.setLayout(new BorderLayout());
this.setBounds(300,300, 300, 300);
this.getContentPane().add(new LoginPanel());
}
点击按钮(LoginPanel)后,我正在尝试从JFrame中删除LoginPanel
并添加SecondPanel
。
现在我要移除LoginPanel
并在SecondPanel
类中添加LoginPanel
,我可以访问username , password
字段,但在这里我无法获取我必须删除的JFrame对象这个组成部分
如果我在ParentJFrameClass
中尝试此操作,那么我无法访问username , password
字段的值。 (因为这是netbeans提供的结构)
那我现在该怎么办?在这种情况下会有什么解决方案
我希望我已经详细解释了这个问题但是如果有什么不清楚请告诉我
专家请帮忙
答案 0 :(得分:1)
要使用cardlayout在面板之间切换,如下面的代码可能对您有所帮助,您需要对其进行修改以满足您的需求:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* replace the real panel of yours
* do the right process
*/
public class CardLayoutLoginDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
JFrame frame = new LoginFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class LoginFrame extends JFrame {
public LoginFrame() {
super("CardLayout Demo");
//Create the panel that contains the "cards".
mainPanel = new JPanel(new CardLayout());
mainPanel.add(getFirstPanel(), FIRST);
mainPanel.add(getSecondPanel(), SECOND);
this.setContentPane(mainPanel);
this.pack();
}
//use your first panel
private JPanel getFirstPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,2));
panel.add(new JLabel("Username: "));
panel.add(new JTextField(10));
panel.add(new JLabel("password: "));
panel.add(new JTextField(10));
JButton btnLogin = new JButton("Login");
JButton btnCancel = new JButton("Cancel");
btnLogin.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
CardLayout cl = (CardLayout)(mainPanel.getLayout());
cl.show(mainPanel, SECOND);
}
});
btnCancel.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
});
panel.add(btnLogin);
panel.add(btnCancel);
return panel;
}
//use the second panel
private JPanel getSecondPanel() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2,2));
panel.add(new JLabel("Second panel"));
panel.add(new JLabel("other processs"));
JButton btnOther = new JButton("Ok");
JButton btnBack = new JButton("Back");
panel.add(btnOther);
panel.add(btnBack);
btnBack.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
CardLayout cl = (CardLayout)(mainPanel.getLayout());
cl.show(mainPanel, FIRST);
}
});
return panel;
}
private final String FIRST = "First panel";
private final String SECOND = "Second panel";
private static final long serialVersionUID = 1L;
private JPanel mainPanel;
}