2013-04-23 94 views
1

即時通訊Java新手,所以我嘗試了一些東西。使用BorderLayout繪製到嵌套面板

我正在玩Java佈局,特別是使用BorderLayout的嵌套面板。

我的問題是我無法繪製到嵌套面板。我能夠繪製到主面板,但不能嵌入其中的面板。

如果你能告訴我我哪裏出錯了,我會非常感激。

這裏是我的主要代碼:

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

public class GUI extends JFrame{ 

public GUI() 
{ 
    setSize(600,600); 

這裏是主面板。

JPanel pan1 = new JPanel(); 
    pan1.setLayout(new BorderLayout()); 
    pan1.setPreferredSize(new Dimension(200,200)); 
    JLabel label = new JLabel("Panel 1"); 
    pan1.add(label); 

然後,我創建了兩個嵌套面板,我將其添加到主面板。

JPanel pan2 = new JPanel(); 
    pan2.setBackground(Color.YELLOW); 
    pan2.setPreferredSize(new Dimension(200,200)); 

    JPanel pan3 = new JPanel(); 
    pan3.setBackground(Color.YELLOW); 
    pan3.setPreferredSize(new Dimension(200,200)); 

這裏是我稱之爲繪製屏幕上形狀的類。

draw drawingShape = new draw(); 

這是問題,因爲我無法將形狀繪製到嵌套面板。

pan2.add(drawingShape); 

但是我可以把它畫到這個主面板上。

pan1.add(drawingShape); 

我將兩個面板插入主面板。 pan1add(pan2,BorderLayout.NORTH); pan1.add(pan2,BorderLayout.NORTH); pan1add(pan3,BorderLayout.SOUTH); pan1.add(pan3,BorderLayout.SOUTH);

getContentPane().add(pan1); 
    setVisible(true); 
} 

public static void main(String args[]) 
{ 
    new GUI(); 
} 
} 

下面是用於創建,其形狀是completley精細的代碼:

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



public class draw extends JPanel{ 

    public void paint(Graphics g) { 
    Image img = createImage(); 
    g.drawImage(img, 20,20,this); 
    } 

private Image createImage(){ 
    BufferedImage bufferedImage = new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB); 
    Graphics g = bufferedImage.getGraphics(); 

    return bufferedImage; 
    } 

} 

的代碼並編譯,我明白任何幫助。

問候

回答

3

風俗畫是通過覆蓋paintComponent()方法,而不是paint()方法來完成。另外,不要忘記調用super.paintComponent()。

有關更多信息和示例,請參閱Custom Painting上的Swing教程部分。

這裏是一個用於創建,其形狀是completley罰款代碼:

我看不出它如何能好起來。據我所知,它什麼都不做。首先,不要在paintComponent()方法中創建圖像。每當Swing確定組件需要重新繪製時,都會調用此方法。其次,所有的代碼都是創建一個空白圖像。

如果您仍有問題,請閱讀教程併發布實際的SSCCE