新细节:
从我的主类的 actionPerformed 事件内部调用时,我的 JPanel 对象的重绘方法不起作用。它确实在主类 ImageViewer 的 ImageViewer 方法中工作,但在此类的 actionPerformed 方法中不起作用。
这些是我的代码中无法正常工作的基本部分(重绘部分):
主类:
/**
* @(#)NeatImageViewer.java
*
* NeatImageViewer application
*
* @author
* @version 1.00 2010/11/1
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class NeatImageViewer extends JFrame implements ActionListener {
GraphicsPanel gp;
NeatImageViewer() {
//... window components ...
}
public static void main(String[] args) {
NeatImageViewer niv = new NeatImageViewer();
niv.setSize(500,500);
niv.setLocationRelativeTo(niv);
niv.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
//...
gp = new GraphicsPanel();
gp.img = img;
gp.repaint(); //<!--- Not Working!
this.add(gp);
//...
}
}
图形面板类:
/**
* @(#)GraphicsPanel.java
*
*
* @author
* @version 1.00 2010/11/1
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class GraphicsPanel extends JPanel {
BufferedImage img;
GraphicsPanel() {
super();
}
protected void paintComponent(Graphics g) {
//paint method isn't executed???
super.paintComponent(g);
System.out.println("Paint!");
}
}