Java 在 java.awtGraphics 上绘制组件

Java draw component on java.awtGraphics

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

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

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

例如

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

}