2013-04-23 88 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