Java Swing - 在componentResized()事件上调整JPanel的大小

时间:2016-02-03 10:46:08

标签: java swing jpanel layout-manager

我在调整窗口大小时尝试在JFrame中将JPanel的大小调整为100%。但JPanel永远不会调整大小...

我正在使用IntelliJ

这是我的代码:

public static void createAndShowGUI() {
    frame = new JFrame("MyApplication");
    frame.setLayout(new GridBagLayout());

    menuPanel = new MenuPanel();
    contentPanel = new ContentPanel();

    MainFrame mainFrame = new MainFrame();
    vimInitialiser = new VimInitialiser();

    frame.addWindowListener(mainFrame);
    frame.addComponentListener(mainFrame);

    JComponent newContentPane = mainFrame;
    newContentPane.setOpaque(true);
    frame.setContentPane(newContentPane);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setMinimumSize(new Dimension(1200, 500));
    frame.pack();
    frame.setVisible(true);
    frame.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

    frame.add(menuPanel.getMenuPanel());
    frame.add(contentPanel.getContentPanel());
}

这是我的JPanel类:

    public class ContentPanel extends JPanel{

    public JPanel getContentPanel(){
        JPanel contentPanel = new JPanel(true);
        JLabel label = new JLabel("ContentPanel");
        Border border = BorderFactory.createLineBorder(Color.black);
        contentPanel.setPreferredSize(new Dimension(940, 480));
        contentPanel.setBorder(border);

        contentPanel.add(label);

        return contentPanel;
    }
}

    public class MenuPanel extends JPanel{

    public JPanel getMenuPanel(){
        JPanel menuPanel = new JPanel(true);
        JLabel label = new JLabel("MenuPanel");
        Border border = BorderFactory.createLineBorder(Color.black);
        menuPanel.setPreferredSize(new Dimension(200, 480));
        menuPanel.setBorder(border);
        menuPanel.add(label);

        return menuPanel;
    }
}

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

尝试使用BorderLayout

frame.setLayout(new BorderLayout());

然后添加如下窗格:

frame.add(menuPanel.getMenuPanel(), BorderLayout.NORTH); 
frame.add(contentPanel.getContentPanel(), BorderLayout.CENTER);

答案 1 :(得分:0)

我认为错误在于你没有设置“填充”字样。和'重量'#39;对于gridbagconstraints。我认为这将解决问题。

GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
frame.add(menuPanel, gridBagConstraints);
frame.add(contentPanel, gridBagConstraints);

你可能需要在限制条件下玩一下,让它按照你想要的方式排列。