Java绘制组件在java.awtGraphics上

时间:2015-04-28 18:05:31

标签: java swing bufferedimage

我有一个创建缓冲图像的方法,我希望能够创建一个进度条,然后将其绘制到缓冲的图像上。知道我怎么能做到这一点吗?

    public void paint() {
      BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
      Graphics g = img.getGraphics();
      JProgressBar pb = new JProgressBar();

      //Draw the progress bar on Graphics g ???
    }

1 个答案:

答案 0 :(得分:2)

你的xy问题似乎是因为你真的不想在任何绘画方法中添加或删除组件。我将假设您要将JProgressBar放在显示图像的组件上,并且为了做到这一点,创建一个扩展JPanel的类,覆盖其paintComponent方法,在该方法覆盖中绘制图像,然后添加JProgressBar到那个JPanel(但不在它的paint或paintComponent方法中)。

e.g。

public class MyPanel extends JPanel {
    private BufferedImage image;
    private JProgressBar progressBar = new JProgressBar();

    public MyPanel() {
        // get your image here
        add(progressBar);
    }

    public Dimension getPreferredSize() {
        Dimension size = super.getPreferredSize();;
        if (image == null) {
            return size;
        } else {
            int w = Math.max(image.getWidth(), size.width);
            int h = Math.max(image.getHeight(), size.height);
            return new Dimension(w, h);
        }
    }

    protected void paintComponent(Graphics g) {
         super.paintComponent(g); 
         if (image != null) {
            g.drawImage(image, 0, 0, null); 
         }
    }

}