2011-12-07 26 views
2

JLayeredPaneにJPanel(複数)を追加しようとしています。しかし、私がそうすると、JPanelのペイントコンポーネントメソッドは効果がないようです。例を以下に示します。JLayeredPaneにJPanelを追加すると、ペイントとサイズ変更が無効になる

import javax.swing.*; 
import java.awt.*; 

public class Example { 

    public static void main(String[] args) { 

     // This Works as expected 
     JFrame usingPanel = new JFrame(); 
     JPanel p = new JPanel(); 
     p.add(new BluePanel()); 
     usingPanel.setContentPane(p); 
     usingPanel.pack(); 
     usingPanel.setVisible(true); 

     // This makes the frame but does not paint the BluePanel 
     JFrame usingLayer = new JFrame(); 
     JLayeredPane l = new JLayeredPane(); 
     l.setPreferredSize(new Dimension(200,200)); 
     l.add(new BluePanel(), JLayeredPane.DEFAULT_LAYER); 
     JPanel p2 = new JPanel(); 
     p2.add(l); 
     usingLayer.setContentPane(p2); 
     usingLayer.pack(); 
     usingLayer.setVisible(true); 
    } 


    static class BluePanel extends JPanel{ 

     public BluePanel(){ 
      setPreferredSize(new Dimension(200,200)); 
     } 

     @Override 
     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 
      g.setColor(Color.BLUE); 
      g.fillRect(0, 0, 200, 200); 
     } 


    } 


} 

なぜですか?可能な解決策は何ですか?

答えて

8

JLayeredPaneにはLayoutManagerがないため、パネルの位置とサイズを自分で設定する必要があります。 追加方法をtutorial

1
  1. あなたは、画面上のサイズをハードコード参照してください

    g.fillRect(0, 0, getWidth(), getHeight()); 
    
  2. (マイナーチェンジ)に

    g.fillRect(0, 0, 200, 200); 
    

    から変更する必要が

    @Override 
    public Dimension getPreferredSize() { 
        return new Dimension(200, 200); 
    } 
    

    を削除してコード行を削除するsetPreferredSize(new Dimension(200,200));

関連する問題