我试图让我的JFrame和它里面的内容改变大小和位置自动当窗口重新调整大小等,我已经成功地做到了这一点,当使用一个JPanel内的JFrame然而,当我添加一个JLayeredPane在这两个之间它停止工作。
工作JPanel和JFrame的代码如下,当屏幕重新调整大小时,面板会动态更改屏幕上的大小和位置。
JFrame UIFrame = new JFrame("Project");
UIFrame.setSize(1100, 768);
UIFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
BorderLayout mainPanelLayout = new BorderLayout();
mainPanel.setLayout(mainPanelLayout);
Footer UIFooter = new Footer(); // Creates the footer
mainPanel.add("South", UIFooter.getPanel());
addTabs(); // Adds all the tabs to the screen
mainPanel.add("Center", Pane);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
UIFrame.setLocation(dim.width/2-UIFrame.getSize().width/2, dim.height/2-UIFrame.getSize().height/2);
UIFrame.setContentPane(mainPanel); // Content placed on the frame
UIFrame.setVisible(true); // Frame set to visible
然而,当我添加到我的JLayeredPane中时,屏幕不再动态地重新调整大小。我认为这是由于setB的方法,但是如果没有这个方法,屏幕上不会显示任何内容。
JFrame UIFrame = new JFrame("Project");
UIFrame.setSize(1100, 768);
UIFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
BorderLayout mainPanelLayout = new BorderLayout();
mainPanel.setLayout(mainPanelLayout);
Footer UIFooter = new Footer();
mainPanel.add("South", UIFooter.getPanel());
addTabs();
mainPanel.add("Center", Pane);
mainPanel.setBounds(0, 0, 1085, 725);
JLayeredPane desktop = new JDesktopPane();
desktop.setOpaque(false);
desktop.add(mainPanel, JLayeredPane.DEFAULT_LAYER);
UIFrame.add(desktop);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
UIFrame.setLocation(dim.width/2-UIFrame.getSize().width/2, dim.height/2-UIFrame.getSize().height/2);
UIFrame.setContentPane(desktop); // Content placed on the frame
UIFrame.setVisible(true); // Frame set to visible
我相信当你使用setB的时候,你会永久地将这个面板固定到那个大小,所以不会有动态调整大小。
我个人大部分时间都倾向于使用GridBagLayout,也许你可以试试?对你来说重要的网格包约束中的设置是“填充”、“权重”和“权重”。
基本上,这段代码应该将JLayeredPane放在已经创建的JFrame中,将JPanel放在JLayeredPane中,并且它都将随着框架调整大小:
JLayeredPane jLayeredPane1 = new JLayeredPane();
JPanel jPanel1 = new JPanel();
GridBagConstraints gBC = new GridBagConstraints();
getContentPane().setLayout(new GridBagLayout());
jLayeredPanel1.setLayout(new GridBagLayout());
gBC.fill = GridBagConstraints.BOTH;
gBC.weightx = 1.0;
gBC.weighty = 1.0;
getContentPane().add(jLayeredPane1, gBC);
jLayeredPane1().add(jPanel1, gBC);