gpt4 book ai didi

java - 如何从 JPanel 中的操作交换 JPanel

转载 作者:行者123 更新时间:2023-12-01 14:09:10 27 4
gpt4 key购买 nike

我是 Java Swing 的新手,但我无法找到解决我的问题的优雅解决方案,所以我想我应该在这里提出一个问题。

我正在尝试根据当前 JPanel 中的按钮单击事件将我当前的 JPanel 更改为另一个 JPanel。本质上只是隐藏一个面板并显示另一个面板。我觉得这可以在我的 MainFrame 类中完成,但是我不确定如何将其反馈给它。我正在尝试的任何事情似乎都无法按预期进行,我将不胜感激任何支持。谢谢

应用程序.java

public static void main(final String[] args) {
MainFrame mf = new MainFrame();
}

主框架.java

public class MainFrame extends JFrame {

public MainFrame(){
setTitle("Swing Application");
setSize(1200, 800);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);

// First Page Frame switch
getContentPane().add(new FirstPage());

}
}

第一页.java

public class FirstPage extends JPanel {

public FirstPage() {
setVisible(true);
JButton clickBtn = new JButton("Click");
clickBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
// Change to SecondPage JPanel here.
}
});
add(clickBtn);
}
}

第二页.java

public class SecondPage extends JPanel {

public SecondPage() {
setVisible(true);
add(new JLabel("Welcome to the Second Page"));

}
}

需要更多信息,请询问谢谢:)

最佳答案

我认为最好的方法是使用 CardLayout .它是为这种情况而创建的。检查我的例子:

public class MainFrame extends JFrame {
private CardLayout cardLayout;

public MainFrame() {
super("frame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

cardLayout = new CardLayout();
getContentPane().setLayout(cardLayout);

getContentPane().add(new FirstPage(this::showPage), Pages.FIRST_PAGE);
getContentPane().add(new SecondPage(this::showPage), Pages.SECOND_PAGE);

setLocationByPlatform(true);
pack();
}

public void showPage(String pageName) {
cardLayout.show(getContentPane(), pageName);
}

public static interface PageContainer {
void showPage(String pageName);
}

public static interface Pages {
String FIRST_PAGE = "first_page";
String SECOND_PAGE = "second_page";
}

public static class FirstPage extends JPanel {
public FirstPage(PageContainer pageContainer) {
super(new FlowLayout());

JButton button = new JButton("next Page");
button.addActionListener(e -> pageContainer.showPage(Pages.SECOND_PAGE));
add(button);
}
}

public static class SecondPage extends JPanel {
public SecondPage(PageContainer pageContainer) {
super(new FlowLayout());

add(new JLabel("This is second page."));

JButton button = new JButton("Go to first page");
button.addActionListener(e -> pageContainer.showPage(Pages.FIRST_PAGE));
add(button);
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true));
}
}

关于java - 如何从 JPanel 中的操作交换 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61119914/

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