使用pack()自动调整JFrame的大小,而不折叠其jPanels



我正在尝试设计一个JFrame,其中有两个不同的JPanel,一个在左边有AbsoluteLayout,另一个在右边有可变维度的GridLayout。

在将一些组件添加到JPanels后,我将它们添加到JFrame contentPane中,并使用方法JFrame.pack()希望获得一个具有最小大小的JFrame,该最小大小可以显示其所有组件,但我得到的是,最小大小仅显示右侧带有GridLayout的JPanel,左侧的JPanell与右侧的JPaneel重叠。

有没有什么好的方法可以使用JFrame.pack()方法,并且它仍然完整地显示两个JPanel?

这是代码:

public class GameGUI extends JFrame{
   private int labSize;
   private JFrame mainFrame;
   private JPanel labPanel;
   private JPanel choicesPanel;
   private JButton exitButton;
   private JButton replayButton;
   public GameGUI(int n) {
        labSize=n;    
        mainFrame = new JFrame("Maze Game");
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.getContentPane().setLayout(new GridLayout(1, 0));
        mainFrame.setVisible(false);    
        labPanel=new JPanel(new GridLayout(labSize,labSize));    
        choicesPanel=new JPanel(new GridLayout(0, 1));
        choicesPanel.setLayout(null);           
        replayButton=new JButton("Replay");
        replayButton.setBounds(10, 11, 80, 30);         
        exitButton=new JButton("Exit");
        exitButton.setBounds(10, 51, 80, 30);    
        choicesPanel.add(replayButton);
        choicesPanel.add(exitButton);           
        mainFrame.getContentPane().add(choicesPanel);
        mainFrame.getContentPane().add(labPanel);
    }
    public void refreshLabShowing(char[][] lab){
        labPanel.removeAll();    
        for(int i=0;i<labSize;i++){
            for(int u=0;u<labSize;u++){
                labPanel.add(new JLabel(String.valueOf(lab[i][u])));
            }
        }           
        mainFrame.pack();
        mainFrame.setVisible(true);
    }
}

pack()仅在与布局管理器配合使用时有效,因为pack()本身会向布局管理器查询所需的维度,因此在这里,不能使用绝对布局和pack()

相关内容

  • 没有找到相关文章

最新更新