使用BorderLayout绘制到嵌套面板

时间:2013-04-23 22:57:46

标签: java swing layout graphics drawing

我是Java的新手,因此我正在尝试一些事情。

我正在使用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);

我将两个面板插入主面板。         pan1.add(pan2,BorderLayout.NORTH);         pan1.add(pan3,BorderLayout.SOUTH);

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

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

以下是创建完美形状的代码:

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;
  }

}

代码编译,我感谢任何帮助。

问候

1 个答案:

答案 0 :(得分:3)

自定义绘制是通过覆盖paintComponent()方法而不是paint()方法完成的。另外,不要忘记调用super.paintComponent()。

阅读Custom Painting上Swing教程中的部分,了解更多信息和示例。

  

以下是创建完美形状的代码:

我不知道它怎么可能没事。据我所知,它没有做任何事情。首先,不要在paintComponent()方法中创建图像。只要Swing确定需要重新绘制组件,就会调用此方法。其次,所有代码都会创建一个空白图像。

如果您仍有问题,请阅读教程并发布实际的SSCCE