5

当我创建我的 GUI 时,我使用卡片布局来保存我的不同面板,我相信很多人都知道。这会将我的屏幕设置为我最大面板的宽度和高度。SudokuPanel这会导致我第一个屏幕的美学问题,它比和小得多CalkuroPanel

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

任何有关良好信息链接的帮助或任何通常会有所帮助的帮助将不胜感激:)。

请在下面找到我的主要课程(我在其中绘制 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);
}
}

编辑

在调用时,brainblast 尝试在重置首选大小后打包框架openWindow,并且 wolah,新框架大小:D

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();
}
4

2 回答 2

4

我可以在卡片布局中设置各个面板的大小吗

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


这个答案使用单个标签显示了这种技术。交换“小面板”的标签并使用右侧的布局,它将居中。

于 2012-10-20T08:14:25.180 回答
0

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

奇迹般有效 :)

于 2016-03-17T12:40:17.890 回答