2017-09-06 23 views
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枚のパネルを持っていることです。 私は何か間違っていると確信していますが、私はそれを認識できません! 助けてくれてありがとう。

+3

本当にJLayeredPane()が必要ですか?一度に1つのPanelを表示する典型的な使用例は、CardLayoutを持つPanelです。 – JensS

+0

'JLayerePane'はデフォルトで' null'レイアウトを持っています。レイアウトマネージャを変更して、ウィンドウ内のサイズ変更に対応するコンポーネント – MadProgrammer

+1

CardLayoutを使用する[例](https://stackoverflow.com/a/46013230/3992939)を参照してください。あなたは何を達成しようとしていますか? – c0der

答えて

0

c0derが言ったように:CardLayoutの使用例を参照してください。

関連する問題