当前位置: 首页 > 面试题库 >

使用CardLayout更改JPanel的大小

澹台俊晖
2023-03-14
问题内容

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


问题答案:

拍摄,像这样,在组件(这里是JLabel而不是JPanel)设置了preferredSize,然后将其放置在使用适当布局的另一个JPanel中,这里是GridBagLayout,默认设置会将组件居中,并使用GridBagLayout添加使用面板将JPanel转换为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();
         }
      });
   }
}


 类似资料:
  • 问题内容: 我有一个包含了一组在。每个都有不同的大小,我希望适应当前显示的大小(而不是适应的大小)。 我该如何实现? 问题答案: 通常是:如果您遇到布局问题,请 始终 使用适当的LayoutManager解决它。 切勿 调整组件的大小提示以达到您的目标。 在这种情况下,调整CardLayout特别容易。默认情况下,它将其prefSize计算为所有卡的prefSizes的最大值。只需子类化并实现以返

  • 我写了一个jframe与card布局如下代码: 我正在尝试调用方法来将卡片(ShowCard)从JPanel(CasaPanel)中的一个更改为另一个,它本身就是一张“卡片”。我想在点击另一个类的JPanel(CasaPanel)中的一个按钮后更改一张“卡片”。怎么做?我的意思是,我知道如何添加按钮和侦听器,但我不知道是否可以从属于该框架的Jpanel类调用JFrame中的方法?如何从其他类引用J

  • 我需要能够以编程方式更改我的Swing应用程序中所有组件的字体大小。我不能用通常的方法(使用UIManager或putClientProperty),因为我使用的是Nimbus外观,所以我使用下面的方法来增加应用程序中每个组件的字体大小... 我遇到的问题是,我在我的JPanel上使用了一个TitledBorder,并且(可以预见的)将我的JPanel传递到上面的方法中并没有调整JPanel的边界

  • 问题内容: 我正在上课的酒店管理软件上工作,我的代码遇到了一些问题。此时,我只是想将我在单独的类中创建的JPanel添加到主gui中。任何帮助将不胜感激。〜谢谢! 注意:错误发生在“ jpanel.add(“ Room”,room.getRoomPanel());“行上 代码:HotelSystem.java RoomSystem.java 问题答案: 您从未初始化 即使您确实对其进行了初始化,您

  • 首先,对组件的荷兰名称表示抱歉。现在,我希望有一个表单,其中有一个jtable,下面有一个按钮。我有几个方法来填充表模型--我没有在这里发布。问题是我的JTable在一个JPanel中,这个JPanel在一个带有Gridlayout的JPanel中,但是它不会改变大小。此刻我的桌子(还是?)我的jscrollpane不适合页面,所以它总是太大--我不确定哪一个是这里的坏蛋组件

  • 问题内容: 我正在尝试使用JavaScript更改图像的大小。jS文件与HTML页面分开。 我想在JS文件中设置图像的高度和宽度。有什么好的方法吗? 问题答案: 引用图像后,就可以像这样设置其高度和宽度: 在html中,它看起来像这样: