Java Swing将Jaayeredpane的JPanel添加到Jframe动态更改大小

时间:2014-07-31 14:29:45

标签: java swing jframe jpanel jlayeredpane

我正在尝试获取我的JFrame及其中的内容以在窗口重新调整大小时自动更改大小和位置。我在JFrame中使用JPanel但是当我添加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时,屏幕不再动态重新调整大小。我认为这取决于setBounds方法,但如果没有此方法,屏幕上不会显示任何内容。

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

1 个答案:

答案 0 :(得分:1)

我相信当你使用setBounds时,你会永久性地将这个面板固定到那个大小,因此不会有动态调整大小。

我个人倾向于在大多数时间使用GridBagLayout,也许你可以尝试一下?格子袋约束中对您重要的设置将是“填充”,“重量”和“重量”。和重量'。

根据它的基础知识,这段代码应该在已经创建的JFrame中放置一个JLayeredPane,在JLayeredPane中放置一个JPanel,它将全部用框架调整大小:

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);