gpt4 book ai didi

java - 在 java swings 中切换/导航 jpanels

转载 作者:搜寻专家 更新时间:2023-11-01 01:54:51 25 4
gpt4 key购买 nike

  • > 我在“abc”包中定义了一个 jframe。此 jframe 也充当主类。
  • > 同一个包 'abc' 还包含 4 个在不同 java 类中定义的 jpanels(panel1,panel2,panel3,panel4)。

当用户点击不同的按钮时,应该如何从主 jframe 类中调用/显示这些不同的 jpanel?如果我有 40-50 个这样的 jpanels 怎么办?从主类切换这些面板的最有效方法是什么?

最佳答案

这是一个非常简单的示例,它使用 next() 和一个按钮来更改面板。

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.CardLayout;

import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.border.Border;

public class TestCards extends JFrame {

private final CardLayout cl = new CardLayout();
private final JPanel cards = new JPanel(cl);
private final Border border = BorderFactory.createEmptyBorder(60, 60, 60, 60);

public TestCards() {

JPanel contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);

JPanel panel1 = new JPanel(new GridBagLayout());
panel1.setBorder(border);
panel1.setBackground(Color.RED);
panel1.add(new JLabel("Card 1"));
cards.add(panel1, "First Panel");

JPanel panel2 = new JPanel(new GridBagLayout());
panel2.setBorder(border);
panel2.setBackground(Color.GREEN);
panel2.add(new JLabel("Card 2"));
cards.add(panel2, "Second Panel");

JPanel panel3 = new JPanel(new GridBagLayout());
panel3.setBorder(border);
panel3.setBackground(Color.BLUE);
panel3.add(new JLabel("Card 3"));
cards.add(panel3, "Third Panel");

JButton controlButton = new JButton("Switch");
controlButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cl.next(cards);
}
});
JPanel controlPanel = new JPanel();
controlPanel.setBackground(Color.LIGHT_GRAY);
controlPanel.add(controlButton);

contentPane.add(cards);
contentPane.add(controlPanel);

cl.show(cards, "First Panel");
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
TestCards frame = new TestCards();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}

(许多)替代方法是使用 3 个按钮,每个按钮显示一个特定的面板(通过使用 show 而不是 next)。

参见 this了解更多信息。

关于java - 在 java swings 中切换/导航 jpanels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761664/

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