Java Swing添加JPanel到JLayeredpane到Jframe动态改变大小

标签 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

最佳答案

我相信当您使用 setBounds 时,您会永久将此面板固定为该大小,因此不会动态调整大小。

我个人大部分时间都倾向于使用GridBagLayout,也许你可以尝试一下? gridbag 约束中对您来说重要的设置是“fill”、“weightx”和“weighty”。

从根本上讲,这段代码应该将 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);

关于Java Swing添加JPanel到JLayeredpane到Jframe动态改变大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061538/

相关文章:

java - PDFBox 表单填写 - saveIncremental 不起作用

OS X : "open" command won't run if . 应用程序包中的 Java 包含 JVM bundle

java - GridLayout + 鼠标监听器

java - 我可以根据比例缩放ValueAxis吗?

java - 使用 JFrame 显示文本

java - 访问另一个 JPanel 中的 JPanel

java - 向改造请求添加 header

java - 有没有办法在 Redis 和关系数据库中使用带有 @RedisHash 的实体?

java - WindowBuilder - 从 Main 打开 JFrame

java - 无法将 imageicon 设置为 JLabel,始终为 null