首先谢谢你的回答,完全没人关注啊,太低端了么~~~不过你说的 那个,我也试过的,把画图和事件处理放在一个都放在panel里面 代码如下,依然是不行。import java.awt.Graphics; import java.awt.event.*; import javax.swing.*;public class E16_8 extends JFrame { public static int xo=0; public static int yo=0; Display display=new Display();
你的在子类内调用,父类不执行。你可以用内部类呀 代码如下import java.awt.Graphics; import java.awt.event.*; import javax.swing.*;public class E16_8 extends JFrame { public static int xo=0; public static int yo=0; Display display=new Display();
代码如下,依然是不行。import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;public class E16_8 extends JFrame {
public static int xo=0;
public static int yo=0;
Display display=new Display();
E16_8(){
add(display);
display.addMouseListener(new Display());
} public static void main(String[] args) {
JFrame frame = new E16_8();
frame.setTitle("E16_8");
frame.setSize(300, 100);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class Display extends JPanel implements MouseListener{
public void mouseClicked(MouseEvent e) {
E16_8.xo=e.getX();//查看语句是否执行的
E16_8.yo=e.getY();//查看用的
System.out.print("x:"+e.getX() +"y:"+e.getY()+" ");
repaint();/***********问题在此
为什么每次点击鼠标,上面的输出语句执行,获取鼠标点击位置也执行,
但是repaint()不执行,
是因为此处的repaint()不能调用Display中的paintComponent()吗*/
}
public void mouseEntered(MouseEvent arg0) {
} public void mouseExited(MouseEvent arg0) {
} public void mousePressed(MouseEvent arg0) {
} public void mouseReleased(MouseEvent arg0) {
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawString("hi", E16_8.xo, 30);
}
}
add(display);
display.addMouseListener(display);
}
改成这样就可以了
代码如下import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;public class E16_8 extends JFrame {
public static int xo=0;
public static int yo=0;
Display display=new Display();
E16_8(){
add(display);
display.addMouseListener(new MouseClick());
} public static void main(String[] args) {
JFrame frame = new E16_8();
frame.setTitle("E16_8");
frame.setSize(300, 100);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
class Display extends JPanel{
protected void paintComponent(Graphics g){
g.drawString("hi", E16_8.xo, 30);
}
}class MouseClick implements MouseListener {
public void mouseClicked(MouseEvent e) {
E16_8.xo=e.getX();//查看语句是否执行的
E16_8.yo=e.getY();//查看用的
System.out.print("x:"+e.getX() +"y:"+e.getY()+" ");
display.repaint();/***********问题在此
为什么每次点击鼠标,上面的输出语句执行,获取鼠标点击位置也执行,
但是repaint()不执行,
是因为此处的repaint()不能调用Display中的paintComponent()吗*/
}
public void mouseEntered(MouseEvent arg0) {
} public void mouseExited(MouseEvent arg0) {
} public void mousePressed(MouseEvent arg0) {
} public void mouseReleased(MouseEvent arg0) {
}
}
}
试了一下 可以显示,也是新手,仅供参考。
创建了两个panel,MouseEvent响应的没有添加到框架里那个panel,所有repaint没有
其实把这一个行
class Display extends JPanel implements MouseListener{
改成
class Display extends Display implements MouseListener{
然后主类中改成
MouseClick mouseClick=new MouseClick();
E16_8(){
add(mouseClick);
mouseClick.addMouseListener(mouseClick);
}
就OK了import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;public class E16_8 extends JFrame {
public static int xo=0;
public static int yo=0;
MouseClick mouseClick=new MouseClick();
E16_8(){
add(mouseClick);
mouseClick.addMouseListener(mouseClick);
} public static void main(String[] args) {
JFrame frame = new E16_8();
frame.setTitle("E16_8");
frame.setSize(300, 100);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class Display extends JPanel{
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawString("hi", E16_8.xo, 30);
}
}class MouseClick extends Display implements MouseListener {
public void mouseClicked(MouseEvent e) {
E16_8.xo=e.getX();//查看语句是否执行的
E16_8.yo=e.getY();//查看用的
System.out.print("x:"+e.getX() +"y:"+e.getY()+" ");
repaint();/***********问题在此
为什么每次点击鼠标,上面的输出语句执行,获取鼠标点击位置也执行,
但是repaint()不执行,
是因为此处的repaint()不能调用Display中的paintComponent()吗*/
}
public void mouseEntered(MouseEvent arg0) {
} public void mouseExited(MouseEvent arg0) {
} public void mousePressed(MouseEvent arg0) {
} public void mouseReleased(MouseEvent arg0) {
}
}2楼code问题:
就按这个处理或者这整成内部类,像这样