java - 使用 CardLayout 更改 JPanel 的大小

标签 java jpanel cardlayout

使用 Java CardLayout 时是否可以更改 Jpanels 的大小?

最佳答案

拍摄,类似这样的组件(这里是 JLabel 而不是 JPanel)设置了它的 PreferredSize,然后将其放置在另一个使用适当布局的 JPanel 中,这里是 GridBagLayout,默认设置将使组件居中,然后添加使用 JPanel 的 GridBagLayout 到使用 panel::的 CardLayout

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.Border;

public class MultiSizedPanels {

   private static void createAndShowUI() {
      final CardLayout cardLayout = new CardLayout();
      final JPanel cardHolder = new JPanel(cardLayout);

      JLabel[] labels = {
         new JLabel("Small Label", SwingConstants.CENTER),
         new JLabel("Medium Label", SwingConstants.CENTER),
         new JLabel("Large Label", SwingConstants.CENTER)};

      for (int i = 0; i < labels.length; i++) {
         int padding = 50;
         Dimension size = labels[i].getPreferredSize();
         size = new Dimension(size.width + 2 * (i + 1) * padding, size.height + 2 * (i + 1) * padding);
         labels[i].setPreferredSize(size);
         Border lineBorder = BorderFactory.createLineBorder(Color.blue);
         labels[i].setBorder(lineBorder);
         JPanel containerPanel = new JPanel(new GridBagLayout());
         containerPanel.add(labels[i]);
         cardHolder.add(containerPanel, String.valueOf(i));
      }

      JButton nextButton = new JButton("Next");
      nextButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            cardLayout.next(cardHolder);
         }
      });
      JPanel btnHolder = new JPanel();
      btnHolder.add(nextButton);

      JFrame frame = new JFrame("MultiSizedPanels");
      frame.getContentPane().add(cardHolder, BorderLayout.CENTER);
      frame.getContentPane().add(btnHolder, BorderLayout.SOUTH);

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

关于java - 使用 CardLayout 更改 JPanel 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5414177/

相关文章:

java - 在 CardLayout 等中重用动态 JList 和 Action 监听器

Android 在带有圆角和 ImageView 的 GridView 中创建项目

java - 如何在 java servlet 中以分块响应发送 Http 预告片/页脚?

java - MainActivity 不是静态类,但它在没有任何显式实例化的情况下执行。如何?

java - 找不到符号(计算器)

java - 重绘时随机函数不会再次执行吗?

Java的Swing似乎正在改变Card Layout的布局

java - 引用 JPanel Action 监听器内部的类

Java:使用CardLayout时如何完整显示卡片JPanel

java - Solr LatLonType multivalued=true,按多个点中最近的一个对文档进行排序