解决方案 »

  1.   

    这里的repaint()已经执行,只是你的panel里没有具体的paint代码,所以看不出任何效果而已。
      

  2.   

    首先谢谢你的回答,完全没人关注啊,太低端了么~~~不过你说的 那个,我也试过的,把画图和事件处理放在一个都放在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();

    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);
    }
    }
      

  3.   

     g.drawString("hi", E16_8.xo, 30); 这个中的E16_8.xo 没有发生变化,所有你repaint 还是在那个位置。
      

  4.   

    E16_8(){
            add(display);
            display.addMouseListener(display);
        }
    改成这样就可以了
      

  5.   

    你的在子类内调用,父类不执行。你可以用内部类呀
    代码如下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) {
    }

    }
    }
    试了一下 可以显示,也是新手,仅供参考。
      

  6.   

    你的repaint调用在子类里,前面也没用对象的引用,当然外部类也无法引用,所以repaint执行只会刷新子类窗口,但你又没子类窗口,所以无法显示,建议使用内部类,可以方便使用display。
      

  7.   

    这几天看i/o去了,没上坛子,多谢各位的热心回答。事隔几天,回头来看这个问题,豁然开朗啊。所以看来遇到想不通的,放几天再来看,突然就明白了~~楼上的回答都是对的,现在一看,改的方法确实很多,只要理解了,怎么写这是可以的。没多少分,见谅~~楼主CODE问题:
    创建了两个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问题:
    就按这个处理或者这整成内部类,像这样