【发布时间】:2017-09-06 20:31:20
【问题描述】:
我有一个 Java 应用程序,在 JFrame 内的 LayeredPane 内有 2 个 JPanel。我希望当我调整窗框大小时,所有面板都会调整大小,尽管它的组件。这是我调整大小函数的代码:
mainFrame.addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentResized(ComponentEvent e) {
// Resize components of JFrame to fit new size
int width = e.getComponent().getWidth();
int height = e.getComponent().getHeight();
if(containerJPanel != null) {
containerJPanel.setBounds(0, 0,
width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT);
containerJPanel.setPreferredSize(new Dimension(width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT));
}
if(mainJPanel != null) {
mainJPanel.setBounds(0, 0,
width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT);
mainJPanel.setPreferredSize(new Dimension(width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT));
}
if(loadingPanel != null) {
loadingPanel.setBounds(0, 0,
width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT);
loadingPanel.setPreferredSize(new Dimension(width-DEFAULT_PANEL_MINUS_WITDH, height-DEFAULT_PANEL_MINUS_HEIGHT));
}
}
@Override
public void componentMoved(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentHidden(ComponentEvent e) {
// TODO Auto-generated method stub
}
});
这里是变量定义:
/** Main frame **/
mainFrame = new JFrame();
mainFrame.setBounds(100,100,DEFAULT_WINDOW_WIDTH,DEFAULT_WINDOW_HEIGHT);
mainFrame.setPreferredSize(new Dimension(DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT));
mainFrame.getContentPane().setLayout(new BorderLayout(0, 0));
containerJPanel = new JLayeredPane();
mainFrame.getContentPane().add(containerJPanel, BorderLayout.CENTER);
containerJPanel.setBounds(0,0,
DEFAULT_WINDOW_WIDTH-DEFAULT_PANEL_MINUS_WITDH, DEFAULT_WINDOW_HEIGHT-DEFAULT_PANEL_MINUS_HEIGHT);
/** Main Panel **/
mainJPanel = new JPanel();
mainJPanel.setBounds(0,0,
DEFAULT_WINDOW_WIDTH-DEFAULT_PANEL_MINUS_WITDH, DEFAULT_WINDOW_HEIGHT-DEFAULT_PANEL_MINUS_HEIGHT);
containerJPanel.add(mainJPanel, new Integer(0), 0);
/** Loading Panel **/
loadingPanel = new JPanel();
containerJPanel.add(loadingPanel, new Integer(1), 0);
loadingPanel.setBounds(0,0,
DEFAULT_WINDOW_WIDTH-DEFAULT_PANEL_MINUS_WITDH, DEFAULT_WINDOW_HEIGHT-DEFAULT_PANEL_MINUS_HEIGHT);
loadingPanel.setLayout(new BorderLayout(0, 0));
loadingPanel.setOpaque(false);
关键是要有两个面板,因此一次可以看到一个。 我确定我做错了什么,但我无法意识到! 感谢您的帮助。
【问题讨论】:
-
你真的想要一个 JLayeredPane() 吗?一次显示一个面板的典型用例是具有 CardLayout 的面板...
-
JLayerePane默认具有null布局,您是否考虑过将布局管理器更改为其他内容,以便能够根据窗口大小的变化调整组件的大小跨度> -
查看使用 CardLayout 的example。你想达到什么目的?
-
谢谢大家。我要试试 CardLayout!我会带着我的 cmets 回来。
-
完美!这样可行。谢谢大家。