gpt4 book ai didi

java - 从单独的类访问 JPanel 组件

转载 作者:行者123 更新时间:2023-12-02 01:48:52 25 4
gpt4 key购买 nike

所以我想要一个在菜单页面和主应用程序页面之间切换的 CardLayout 类,但我想在它们自己的类中设计这两个面板,然后在不同的类中添加一个 ActionListener 和一个 CardLayout ,并有ActionListener 使用在面板类之一中创建的按钮。

这是一个(不太短的)SSCCE,涵盖了我想说的内容:

import java.awt.*;
import javax.swing.*;

public class MenuPanel extends Frame{
JPanel menuPanel;
JButton login;
JButton signup;

public MenuPanel(){
menuPanel = new JPanel(new GridBagLayout());
login = new JButton("Login");
signup = new JButton("Signup");

menuPanel.add(login);
menuPanel.add(signup);

}
}
import java.awt.*;
import javax.swing.*;

public class MainPanel extends JFrame{
JPanel menuPanel;
JButton login;
JButton signup;

public MainPanel(){
mainPanel = new JPanel(new GridBagLayout());=

menuPanel.setBackground(Color.grey);

}
}
import java.awt.*;
import javax.swing.*;

public class CardLayout extends Frame implements ActionL {
//Now how do I add the frames from the other classes so that I can add them to my CardLayout?
CardLayout cl = new CardLayout();
JPanel panelCont;
public CardLayout() {
frame.add(panelCont);

panelCont = new JPanel(cl);
//Here is where I'm having trouble
panelCont.add(menuPanel, "1");
panelCont.add(mainPanel, "2");

cl.show(panelCont, "1");

login.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
cl.show(panelCont, "2");
}
});
}
}

public class Main {
public static void main(String[] args) {
new CardLayout();
}
}

最佳答案

您无法将Frame添加到另一个组件。 Frame 是具有 native 对等点的顶级组件。您应该从其他东西(JPanel?)继承

另外,顺便说一句,你所做的并不是好的设计。一般来说,在 MVC Swing 设计中,所有 View 和控制方面都应该位于一个类中。不要将 View 拆分为多个类,除非每个类都作为自己的可重用小部件

关于java - 从单独的类访问 JPanel 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70572478/

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