我设计了一个接口欢迎画面与一个JFrame中包括两名JPanels(JPANEL1右边和JPanel2左)。 左侧的按钮是切换面板中JPANEL1。 我想按一个按钮来取代JPANEL1内容与其他的JPanel,但我不`吨知道怎么办。 请帮忙。
Answer 1:
下面是一些应接近您介绍一个非常简单的例子。 在左边,我们有一个拥抱按钮来切换右面板的内容。 在右边,你有一个给定的边界和标签的面板。 当你按下按钮,右边的内容交换与其他面板。
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestCardLayout2 {
protected void initUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel leftPanel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Left panel");
leftPanel.add(label, BorderLayout.NORTH);
JButton button = new JButton("Toggle right panel");
leftPanel.add(button);
frame.add(leftPanel, BorderLayout.WEST);
final CardLayout cardLayout = new CardLayout();
final JPanel rightPanel = new JPanel(cardLayout);
rightPanel.setPreferredSize(new Dimension(200, 500));
JPanel rightPanel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
rightPanel1.setBorder(BorderFactory.createLineBorder(Color.RED));
JPanel rightPanel2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
rightPanel2.setBorder(BorderFactory.createLineBorder(Color.BLUE));
JLabel label1 = new JLabel("Right panel 1 with a red border");
JLabel label2 = new JLabel("Right panel 2 with a blue borer");
rightPanel1.add(label1);
rightPanel2.add(label2);
rightPanel.add(rightPanel1, "panel1");
rightPanel.add(rightPanel2, "panel2");
frame.add(rightPanel, BorderLayout.EAST);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.next(rightPanel);
}
});
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestCardLayout2().initUI();
}
});
}
}
Answer 2:
一个替代CardLayout
将JRootPane
和其JRootPane.setContentPane()
方法。 下面是一个例子:
final JPanel panel1 = ...;
final JPanel panel2 = ...;
boolean showingPanel1 = true;
final JRootPane rootPane = new JRootPane();
rootPane.setContentPane(panel1);
JButton switchButton = new JButton("Switch");
switchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (showingPanel1) {
rootPane.setContentPane(panel2);
} else {
rootPane.setContentPane(panel1);
}
showingPanel = !showingPanel;
}
});
添加rootPane
和switchButton
组件到你的窗口,然后单击switchButton
会切换出面板。
这里有一个教程 。 你应该主要是与有关JRootPane.setContentPane
,在本教程中其他的东西是不相关的。
Answer 3:
最好的答案是,我发现,我将只创建一个JFrame的,并会让一个大的JPanel包括两个JPanels(JPanelLeft包括按钮和JPanelRight包括按钮做什么),那么我会复制每个JButton的主要的JPanel。 当我按下任意键我会做(JFrame.getContentPane.removeAll)以删除旧的JPanel然后(JFrame.getContentPane.Add(NewJPanel)。
这对我的作品,并让我的设计,我想。 感谢每一个机构。
文章来源: How can I replace one of two JPanels with another JPanel in Java?