我可以在CardLayout中设置各个面板的大小吗?

时间:2012-10-20 08:12:36

标签: java swing panel cardlayout

当我创建GUI时,我使用cardlayout来保存我的不同面板,因为我相信很多人都知道。这会将我的屏幕设置为我最大面板的宽度和高度。这会导致我的第一个屏幕的美感出现问题,这个问题远小于SudokuPanelCalkuroPanel

当我换到更大的屏幕时,我尝试设置首选尺寸,但无济于事。

任何有关良好信息链接的帮助或任何通常会有帮助的信息都会非常感激:)。

请在下面找到我的主要课程(我在哪里画GUI):

import java.awt.*; import javax.swing.*; import java.util.*;

public class puzzleGUI{
  private static JPanel screens;
  public static String username;
  static public void main (String[] args){
  JFrame puzzle = new JFrame ("Sudoku/Calkuro Pro");

  ...

  PuzzleStartPanel startPanel = new PuzzleStartPanel();
  PuzzleChoosePanel choosePanel = new PuzzleChoosePanel();
  PuzzleSudokuPanel sudokuPanel = new PuzzleSudokuPanel(); 
  PuzzleCalkuroPanel calkuroPanel = new PuzzleCalkuroPanel();

  screens = new JPanel(new CardLayout()); 
  screens.add(startPanel, "start");
  screens.add(choosePanel, "choosePuzzle");
  screens.add(sudokuPanel, "sudoku");
  screens.add(calkuroPanel, "calkuro");
  screens.setPreferredSize (new Dimension(250, 80));

  puzzle.setJMenuBar(menuBar);
  puzzle.getContentPane().add(screens);
  puzzle.pack();
  puzzle.setVisible(true);
  puzzle.setResizable(false);
  puzzle.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}

static public void getUsername(String str){
  username = str;
}

static public void openWindow(String newFrame){
  CardLayout cl = (CardLayout)(screens.getLayout());
  cl.show(screens, newFrame);
}
}

修改

在调用openWindow时重置首选大小后,脑电图尝试打包框架,并且新框架尺寸为:

static public void openWindow(String newFrame, int a, int b){
  CardLayout cl = (CardLayout)(screens.getLayout());
  cl.show(screens, newFrame);
  screens.setPreferredSize (new Dimension(a, b));
  puzzle.pack();
}

2 个答案:

答案 0 :(得分:4)

  

我可以在cardlayout中设置各个面板的大小

当然可以。但布局将忽略它们并使每张卡的大小相同。您可以期望的最好的方法是将较小的面板添加到另一个允许内容缩小的面板(带有布局)。


This answer使用单个标签显示此技术。换掉小面板的标签'并使用右侧的布局,它将居中。

答案 1 :(得分:0)

我遇到了类似的问题,我通过一点作弊(“脏代码”)解决了这个问题。 我有两个小组:SmallOne和HugeOne。我将HugeOne的可见性设置为false。在这种情况下,SmallOne设置整个CardPanel的大小。您可以创建一个在用户选择HugeOne面板时调用的方法,在此方法中,您可以将HugeOne可见性设置为true。 CardPanel将调整大小。

像魅力一样工作:)