我有一个创建缓冲图像的方法,我希望能够创建一个进度条,然后将其绘制到缓冲的图像上。知道我怎么能做到这一点吗?
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 ???
}
答案 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);
}
}
}