【问题标题】:Can I set the size of individual panels in a CardLayout?我可以在 CardLayout 中设置各个面板的大小吗?
【发布时间】:2012-10-10 19:06:47
【问题描述】:

当我创建我的 GUI 时,我相信很多人都知道,我使用卡片布局来保存不同的面板。这会将我的屏幕设置为我最大面板的宽度和高度。这会导致我的第一个屏幕出现美学问题,比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 时,brainblast 尝试在重置首选大小后打包框架,并且 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();
}

【问题讨论】:

    标签: java swing panel cardlayout


    【解决方案1】:

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

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


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

    【讨论】:

    • 有没有办法让框架根据当前面板动态改变大小
    • "frame to dynamic change size" pack() 在某些情况下可能有效,但不是这个。所以不行'。尽管我很害怕,但如果这是必需的功能,您可能必须根据需要添加和删除面板,这本身需要一些额外的代码行才能使其按预期工作。
    • 在重置面板的首选尺寸后重新包装框架工作正常:D
    • 很高兴你把它整理好了。这个解决方案很受启发。 :)
    【解决方案2】:

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

    像魅力一样工作:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多