java – 如何在同一位置用另一个JPanel替换一个JPanel?
发布时间:2020-12-15 04:22:51 所属栏目:Java 来源:网络整理
导读:我有一个大约四帧的JFrame.在给定动作之后,我想在同一位置将一个面板替换为另一个面板.我切换它们的方法看起来像这样(这个对象是一个扩展JFrame的类): public void switchPanel(){ mainPanel.remove(introPanel); mainPanel.add(questionPanel); this.repai
|
我有一个大约四帧的JFrame.在给定动作之后,我想在同一位置将一个面板替换为另一个面板.我切换它们的方法看起来像这样(这个对象是一个扩展JFrame的类):
public void switchPanel(){
mainPanel.remove(introPanel);
mainPanel.add(questionPanel);
this.repaint();
}
窗口的原始创建如下所示: mainPanel.add(titlePanel); mainPanel.add(sidePanel); mainPanel.add(introPanel); 解决方法
你问:
非常容易:使用CardLayout,因为这个工具是为这种情况而构建的. 如果您有以下常量: public static final String INTRO_PANEL = "intro panel"; public static final String QUESTION_PANEL = "question panel"; 并添加了你的JPanel mainPanel.setLayout(cardLayout); mainPanel.add(introPanel,INTRO_PANEL); mainPanel.add(questionPanel,QUESTION_PANEL); cardLayout.show(mainPanel,INTRO_PANEL); 然后你可以用以下方式交换JPanels: cardLayout.show(mainPanel,QUESTION_PANEL); 假设QUESTION_PANEL是在您将问题面板添加到主面板时使用的字符串常量,并且mainPanel使用CardLayout,那么将显示交换所需的全部内容. 例如: import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
public class SwapPanels extends JPanel {
public static final String INTRO_PANEL = "intro panel";
public static final String QUESTION_PANEL = "question panel";
private static final int PREF_W = 500;
private static final int PREF_H = 400;
private CardLayout cardLayout = new CardLayout();
private JPanel introPanel;
private JPanel questionPanel;
private Random random = new Random();
public SwapPanels() {
introPanel = createPanel("Introduction");
questionPanel = createPanel("Question");
setLayout(cardLayout);
add(introPanel,INTRO_PANEL);
add(questionPanel,QUESTION_PANEL);
int delay = 3 * 1000; // show intro for 3 seconds
new Timer(delay,new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.show(SwapPanels.this,QUESTION_PANEL);
((Timer) e.getSource()).stop();
}
}).start();
}
private JPanel createPanel(String title) {
int rgb = random.nextInt();
Color color = new Color(rgb);
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(BorderFactory.createLineBorder(color,60));
panel.add(new JLabel(title));
return panel;
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W,PREF_H);
}
private static void createAndShowGui() {
SwapPanels mainPanel = new SwapPanels();
JFrame frame = new JFrame("SwapPanels");
frame.setDefaultCloSEOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
