2011-10-29 17 views
6

私は徐々にユーザーの入力に基づいてイメージを構築しようとしています。私がしようとしているのは、たくさんのグラフィックスを作成してレイヤーとして追加することですが、表示されないのでいくつか問題があります。私が使用しているコードは次のとおりです。JLayeredPaneでグラフィックスが表示されない(Java swing)

public class ClassA 
{ 
    protected final static int dimesionsY = 1000; 
    private static int dimesionsX; 
    private static JFrame window; 
    private static JLayeredPane layeredPane; 

    public void init() 
    { 
     window = new JFrame("Foo"); 
     dimesionsX = // some user input 
     window.setPreferredSize(new Dimension(dimesionsX, dimesionsY)); 
     window.setLayout(new BorderLayout()); 

      layeredPane = new JLayeredPane(); 
     layeredPane.setBounds(0, 0, dimesionsX, dimesionsY); 
     window.add(layeredPane, BorderLayout.CENTER); 

      ClassB myGraphic = new ClassB();  
     myGraphic.drawGraphic(); 

     layeredPane.add(myGrpahic, new Integer(0), 0); 

     window.pack(); 
     window.setVisible(true); 
    } 
} 



public class ClassB extends JPanel 
{ 
    public void drawGraphic() 
    { 
     repaint(); 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 

     g.setColor(Color.BLACK); 
     g.fillRect(10, 10, 100, 100); 
    } 
} 

ただし、私のグラフィックは表示されないようです。理由はわかりません。私もJPanelに追加しようとしましたが、JPanelJLayeredPaneに追加しようとしましたが、どちらもうまくいきませんでした。

誰かが私を助けてくれますか?

答えて

13

JLayeredPaneにコンポーネントを追加する場合は、コンテナを使用してnullレイアウトに追加するのと同じです。コンポーネントのサイズと位置を完全に指定する必要があります。

は、例えば、

import java.awt.*; 

import javax.swing.*; 

public class ClassA { 
    protected final static int dimesionsY = 800; 
    protected final static int dimesionsX = 1000; //!! 
    private static JFrame window; 
    private static JLayeredPane layeredPane; 

    public void init() { 
     window = new JFrame("Foo"); 
     // !! dimesionsX = // some user input 

     //!! window.setPreferredSize(new Dimension(dimesionsX, dimesionsY)); 
     window.setLayout(new BorderLayout()); 

     layeredPane = new JLayeredPane(); 
     //!! layeredPane.setBounds(0, 0, dimesionsX, dimesionsY); 
     layeredPane.setPreferredSize(new Dimension(dimesionsX, dimesionsY)); 
     window.add(layeredPane, BorderLayout.CENTER); 

     ClassB myGraphic = new ClassB(); 
     myGraphic.drawGraphic(); 

     myGraphic.setSize(layeredPane.getPreferredSize()); 
     myGraphic.setLocation(0, 0); 
     //!! layeredPane.add(myGraphic, new Integer(0), 0); 
     layeredPane.add(myGraphic, JLayeredPane.DEFAULT_LAYER); 

     window.pack(); 
     window.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new ClassA().init(); 
    } 
} 

class ClassB extends JPanel { 
    public void drawGraphic() { 
     repaint(); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     g.setColor(Color.BLACK); 
     g.fillRect(10, 10, 100, 100); 
    } 
} 
+0

はまた、時にはあなたは、推奨サイズを設定する必要があります。あなたの問題のもう一つの解決策には、BufferedImagesを重ね合わせることが含まれます。 –

+0

ありがとうございました。グラフィックを追加するときに 'JLayeredPane.DEFAULT_LAYER'を使用していることに気付きました。私は、グラフィックを追加したい場合に、何が最善のものかを考えていただけです。 –

+0

私はどのロジックを使っても最高の結果を出すことができます。私が知っていることが底にあるとすれば、それをDefaultレイヤーに入れます。 –

0

ジャワチュートリアルから、Laying Out Components in a Layered Paneを参照してください。あなたがうまくいけば、あなたが不透明がfalseに設定されて世話をしている、互いの上のJPanelを敷設している場合、また

layeredPane.setPreferredSize(new Dimension(width, height));

関連する問題