0
JFrame内のLayeredPane内に2つのJPanelを持つJavaアプリケーションがあります。ウィンドウフレームのサイズを変更すると、すべてのパネルのサイズが変更されます。ここでサイズ変更時の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);
ポイントは1つが一度に表示されているように、2枚のパネルを持っていることです。 私は何か間違っていると確信していますが、私はそれを認識できません! 助けてくれてありがとう。
本当にJLayeredPane()が必要ですか?一度に1つのPanelを表示する典型的な使用例は、CardLayoutを持つPanelです。 – JensS
'JLayerePane'はデフォルトで' null'レイアウトを持っています。レイアウトマネージャを変更して、ウィンドウ内のサイズ変更に対応するコンポーネント – MadProgrammer
CardLayoutを使用する[例](https://stackoverflow.com/a/46013230/3992939)を参照してください。あなたは何を達成しようとしていますか? – c0der