要在
JPanel
上显示图像,调用了哪几个关键的类方法?
经过
Debug
,总结如下:
无论选择按钮或菜单来触发事件,打开图像文件
分别调用的方法依次是
按钮或菜单的事件处理方法 (ButtonOpen_mouseClicked()) ->
自定义的加载方法 (loadMyImage()) ->
Graphics 对象的 drawImage() ->
JPanel 的 imageUpdate() ->
JPanel 的 repaint()
以下代码仅是示例,不完全
void ButtonOpen_mouseClicked (MouseEvent e) {
panel.loadChemImg(imageFile.getAbsolutePath());
}
public void loadMyImage (String s) {
originalImage = Toolkit.getDefaultToolkit().getImage(s);
if (ibuff == null) {
init_buff();
}
buffgra. drawImage (originalImage, 0, 0, this);
// 这里会调用 imageUpdate()
}
public boolean imageUpdate (Image originalImage, int flags, int x, int y, int w, int h) {
Color col;
if (flags == ImageObserver.ALLBITS) {
col = buffgra.getColor();
buffgra.setColor(Color.white);
buffgra.fillRect(0, 0, getWidth(), getHeight());
buffgra.drawImage(originalImage, 0, 0, this);
buffgra.setColor(col);
repaint();
// 完全加载后返回 false ,防止再次调用
return false;
}
return true;
}
无论选择按钮或菜单来触发事件,打开图像文件
分别调用的方法依次是
按钮或菜单的事件处理方法 (ButtonOpen_mouseClicked()) ->
自定义的加载方法 (loadMyImage()) ->
Graphics 对象的 drawImage() ->
JPanel 的 imageUpdate() ->
JPanel 的 repaint()
以下代码仅是示例,不完全
void ButtonOpen_mouseClicked (MouseEvent e) {
panel.loadChemImg(imageFile.getAbsolutePath());
}
public void loadMyImage (String s) {
originalImage = Toolkit.getDefaultToolkit().getImage(s);
if (ibuff == null) {
init_buff();
}
buffgra. drawImage (originalImage, 0, 0, this);
// 这里会调用 imageUpdate()
}
public boolean imageUpdate (Image originalImage, int flags, int x, int y, int w, int h) {
Color col;
if (flags == ImageObserver.ALLBITS) {
col = buffgra.getColor();
buffgra.setColor(Color.white);
buffgra.fillRect(0, 0, getWidth(), getHeight());
buffgra.drawImage(originalImage, 0, 0, this);
buffgra.setColor(col);
repaint();
// 完全加载后返回 false ,防止再次调用
return false;
}
return true;
}