加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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);

解决方法

你问:

How can I replace one JPanel with another JPanel in the same position?

非常容易:使用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();
         }
      });
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读