如何使JPanel保持在另一个具有setSize的JPanel之上

时间:2018-03-26 15:46:03

标签: java swing jpanel jlayeredpane

我已经使用JLayeredPane查看了其他stackoverflow和许多其他示例,但我无法解决我的问题。

框架类 - >主要JPanel类 - > 2个JPanel课程

我将Main JPanel设置为Border布局,并且我在主JPanel中将2个JPanel设置为North和South。 North JPanel有setPreferredSize。

我遇到的问题是当我缩小窗口大小时,South Panel中我声明的按钮被隐藏了。即使窗口减少,我仍然希望用户可以看到按钮(南面板)。

JPanel mainPanel = new JPanel(new BorderLayout());

//North panel
JPanel northPanel = new JPanel();
northPanel.setLayout(new GridBagLayout());
northPanel.setPreferredSize(new Dimension(600, 350));
northPanel.add(example..)
......

//South panel
JPanel southPanel = new JPanel(new BorderLayout()););
JButton button1 = new JButton();
JButton button2 = new JButton();
southPanel.add(button1, BorderLayout.WEST);
southPanel.add(button2, BorderLayout.EAST);

//Add north and south panels to main panel
this.mainPanel.add(northPanel, BorderLayout.NORTH); 
this.mainPanel.add(southPanel, BorderLayout.SOUTH); //want these buttons 
//to be visible even when window size is reduced. 
//but now the buttons gets hidden behind the north panel.

无论窗口大小如何,如何确保南面板始终可见?

希望我的解释有意义并且谢谢你!

1 个答案:

答案 0 :(得分:2)

  

我遇到的问题是当我缩小窗口大小时,South Panel中我声明的按钮会被隐藏。

面板上的组件基于其ZOrder绘制。当一个组件被添加到面板时,它被赋予更高的ZOrder。 Swing实际上首先使用最高的ZOrder绘制组件。

所以不要这样做:

panel.setLayout( new BorderLayout() );
panel.add( new JButton("NORTH"), BorderLayout.NORTH );
panel.add( new JButton("SOUTH"), BorderLayout.SOUTH );

你可以这样做:

panel.setLayout( new BorderLayout() );
panel.add( new JButton("SOUTH"), BorderLayout.SOUTH );
panel.add( new JButton("NORTH"), BorderLayout.NORTH );

现在“南”按钮将被涂在“北”按钮的顶部。当然,只有当南部分不透明时,这才有效。