2011-10-29 105 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首先,將JPanel添加到JLayeredPane但是,這也不起作用。

請有人可以幫我嗎?

回答

13

如果將組件添加到JLayeredPane中,就像使用容器將它添加到空佈局一樣:您必須完全指定組件的大小和位置。

例如,

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

此外,如果你對不透明設置爲false對方,希望你照顧的頂部鋪設JPanels。針對您的問題的另一個解決方案包括將BufferedImages分層疊加。 –

+0

謝謝你對此的幫助。我注意到添加圖形時使用了'JLayeredPane.DEFAULT_LAYER'。我只是想知道什麼是最好的使用情況下,我想添加額外的圖形? –

+0

我會使用任何邏輯指令來最好地工作。如果我知道某些東西在底部,我會將它放在默認層中。 –