public void paintComponent(java.awt.Graphics g)
{
super.paintComponent(g);
g.drawOval(center.x, center.y, radius, radius);
} public void mouseClicked(MouseEvent e)
{
center = new Point(50,50);
radius = 30;
repaint();
} 想在单击鼠标后更新center radius变量 再通过repaint()来调用paintComponent()来重画圆形 经过调试发现单击鼠标后确实调用了repaint(),但是程序并没有转想执行paintComponent() 怎么才能达到我的目的 让程序执行paintComponent()这两个函数所在类继承了JPanel
{
super.paintComponent(g);
g.drawOval(center.x, center.y, radius, radius);
} public void mouseClicked(MouseEvent e)
{
center = new Point(50,50);
radius = 30;
repaint();
} 想在单击鼠标后更新center radius变量 再通过repaint()来调用paintComponent()来重画圆形 经过调试发现单击鼠标后确实调用了repaint(),但是程序并没有转想执行paintComponent() 怎么才能达到我的目的 让程序执行paintComponent()这两个函数所在类继承了JPanel
也不行
implements Observer , MouseListener
{
private int radius;
private Point center;
public Graphics()
{
center = new Point(10,10);
radius = 10;
}
public void paintComponent(java.awt.Graphics g)
{
super.paintComponent(g);
g.drawOval(center.x, center.y, radius, radius);
Toolkit.getDefaultToolkit().beep();
} public void update(Observable o, Object arg)
{
Text t = (Text)o;
this.radius = t.getRadius();
} public void mouseClicked(MouseEvent e)
{
center = new Point(50,50);
radius = 30;
//Toolkit.getDefaultToolkit().beep();
repaint();
}
}// 下面这个类就是把继承自JPanel类的Graphics类加如到JFrame中
// 单击鼠标后应该可以看到面版上的圆形大小发生变化 但是程序并没有执行paintComponent
// 函数
public class Controller
{
JFrame f = null;
Graphics gra = null;
Controller()
{
gra = new Graphics();
f = new JFrame("Exp3");
Container content = f.getContentPane();
gra.addMouseListener(new Graphics());
content.add(gra);
f.setSize(700,500);
f.setVisible(true);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String agrs[])
{
new Controller();
}
}
{
JFrame f = null;
Graphics gra = null;Controller()
{
gra = new Graphics();
f = new JFrame("Exp3");
Container content = f.getContentPane();
gra.addMouseListener(new Graphics());////-->这儿错了,要写成gra.addMouseListener(gra);
content.add(gra);
f.setSize(700,500);
f.setVisible(true);
但还是有一个问题不明白 按照原先我的做法——gra.addMouseListener(new Graphics());在单击鼠标时确实响应了单击事件(我在public void mouseClicked(MouseEvent e) {}加了Toolkit.getDefaultToolkit().beep();且能听到声音)可就是执行repaint()时程序流程走不到paintComponent()