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