我正在尝试通过将新图像目录发送到我的绘图面板然后将Image变量更改为该图像来更改正在绘制的图像。我已经测试了代码以确保目录正在通过,但图像永远不会改变。他们似乎忽略了新的图像并继续绘制前一个图像。我为这些凌乱的代码道歉,但我一直在调整这个问题几个小时,试图让图像改变,让我感到沮丧。
public class painting extends JPanel {
private String BGDir;
private String Dir;
private int Width;
private int Height;
private Image image1;
private Image image2;
public painting(int h, int w, String BG, String Char) {
BGDir = BG;
Dir = Char;
Height = h;
Width = w;
System.out.println(BGDir);
System.out.println(Dir);
try {
image1 = (new ImageIcon(Char)).getImage();
image2 = (new ImageIcon(BG)).getImage();
} catch (Exception e) {
System.out.println("no such file");
}
repaint();
}
public void update(Graphics g) {
paintComponent(g);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
System.out.println(BGDir);
System.out.println(Dir);
// PAINTS THE BACKGROUND
g2.drawImage(image2, 0, 0, getWidth(), (int) (getWidth() * .533), null);
// PAINTS THE SCALED CHARACTER
g2.drawImage(image1, (int) (Width / 6.22), (int) (Height * .246),
(int) (Height * .754 * .2376), (int) (Height * .754), null);
repaint();
}
}
答案 0 :(得分:0)
在此面板实例化一次后,您无法通过构造函数参数更改图像。您只能创建此面板的新实例(使用新URL),然后使用新实例替换旧实例。您应该显示创建此窗格的第一个实例的代码,以及显示如何尝试更新图像的代码。
答案 1 :(得分:0)
我使用BufferedImage
,但这是来自我的工作代码的示例。
public class PaintPanel extends JPanel {
private static final long serialVersionUID = 1L;
BufferedImage icon;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(getBufferedIcon(), 12, 12, null);
}
public void setBufferedIcon(BufferedImage icon) {
this.icon = icon;
}
private BufferedImage getBufferedIcon() {
return icon;
}
}
忽略12的偏移,这只是因为我从我的一个项目中撕掉了这个。我在另一个课程中所做的就是创建PaintPanel
并设置BufferedIcon
。
每次我想更新图标时,都会调用PaintPanel.setBufferedIcon(icon);
然后PaintPanel.repaint();
请记住命名 PaintPanel
,我只是调用它,以便您可以更轻松地阅读代码:)