2012-10-20 47 views
4

當我創建我的GUI時,我使用一個cardlayout來保存我不同的面板,因爲我相信很多人都知道。這將我的屏幕設置爲我最大面板的寬度和高度。這導致了我的第一屏幕的美觀問題,這比SudokuPanelCalkuroPanel小得多。我可以設置CardLayout中單個面板的大小嗎?

我試圖設置首選大小,當我改變到更大的屏幕,但無濟於事。

任何幫助鏈接到良好的信息或任何只是一般的幫助將不勝感激:)。

請在下面找到我的主類(在這裏我得出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

我可以設置卡片佈局中的單個面板的尺寸

當然。但佈局將忽略它們並使每張卡的大小相同。您可以期望的最好的方式是將較小的面板添加到另一個面板(使用佈局),以使內容縮小。


This answer顯示了使用單個標籤的這種技術。交換'小面板'的標籤並使用右側的佈局,它將居中。

+0

有沒有什麼辦法的框架取決於當前面板 –

+0

*「幀動態改變大小」 *'包()'可能在某些情況下工作的動態改變大小,但不是這一個。所以不行'。正如我承認的那樣,如果這是必需的功能,您可能需要根據需要添加和刪除面板,這本身需要一些額外的代碼行才能使其按預期工作。 –

+0

原來在重新設置面板的首選尺寸後重新打包框架:D –

0

我也有類似的問題,我用一個小騙子(「髒碼」)解決它。 我有兩個面板:SmallOne和HugeOne。我將HugeOne的可見性設置爲false。在這種情況下,SmallOne設置整個CardPanel的大小。您可以創建一個在用戶選擇HugeOne面板時調用的方法,並且在此方法中,您將HugeOne可見性設置爲true。 CardPanel將調整大小。

就像一個魅力:)

相關問題