【发布时间】:2012-05-10 13:29:43
【问题描述】:
我的 jPanel 有一个问题。 我有一个按钮,它来自字符串输入(数学公式)的 PNG 图像,然后它将在 jPanel 中重新绘制旧图像。问题就出现了。图像已更改,但在我手动调整应用程序窗口大小之前,jPanel 不会重新绘制。
看起来面板在调整大小之前不会重新绘制。但我不知道如何在那个按钮中做到这一点。
顺便说一句。我在 netbeans 中使用 GUI Builder。
我的代码...第一次尝试:
public class ImagePanel extends JPanel {
private String path;
Image img;
public ImagePanel() {
try {
//save path
path = "Example5.png";
//load image
img = ImageIO.read(new File(path));
} catch (IOException ex) {
}
}
@Override
public void paint(Graphics g) {
//draw the image
if (show) {
try {
if (img != null) {
img = ImageIO.read(new File(path));
g.drawImage(img, 0, 0, this);
}
} catch (IOException ex) {
}
} else {
show = true;
}
}
}
在Window类/按钮方法中:
imagePanel = new ImagePanel();
imagePanel.repaint();
imagePanel.updateUI();
第二次尝试:
public class ImagePanel extends JPanel {
private String path;
Image img;
ImagePanel(Image img) {
this.img = img;
}
public void setImg(Image img) {
this.img = img;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw image centered in the middle of the panel
g.drawImage(img, 0, 0, this);
}
}
和按钮:
imagePanel.setImg(new ImageIcon("2.png").getImage());
imagePanel.repaint();
【问题讨论】:
-
开窗时面板会被涂漆吗?还是完全看不见?请注意,如果布局管理器尚未计算其边界,则面板的大小可能为 0/0。
-
添加图片时能否检查jPanel是否失效?调整大小会导致调用 validateTree,因此布局管理器会验证其子级
-
调用 revalidate();在重绘()之前;?
标签: java image swing jpanel paintcomponent