gpt4 book ai didi

java - 从 JPanel 对象获取 Parent Frame 对象

转载 作者:行者123 更新时间:2023-12-01 13:39:29 26 4
gpt4 key购买 nike

是否可以从 JPanel 类获取父 JFrame 对象?
实际上我正在尝试使用 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 并在 LoginPanel 类中添加 SecondPanel ,我可以在其中访问 用户名 、 密码 字段,但在这里我无法获取必须从中删除此组件的 JFrame 对象。
如果我在 ParentJFrameClass 中尝试此操作,那么我将无法访问 username , password 字段的值。 (因为这是netbeans提供的结构)
那么我现在应该做什么呢?这种情况下的解决方案是什么
我希望我已经详细解释了问题,但如果有任何不清楚的地方,请告诉我
请高手帮忙

最佳答案

要使用卡片布局在面板之间进行更改,如下代码可能对您有帮助,您需要修改它以满足您的需要:

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;
}

关于java - 从 JPanel 对象获取 Parent Frame 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20952058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com