2014-09-23 2 views
1

Я сделал этот пример практикой, когда эта программа отображает координацию мыши на панели, она отлично работает, и проблема, которую я продолжаю получать с каждым примером «paintComponent», заключается в том, что дисплей никогда не очищается, обновляется isn «т происходит вот код:paintComponent неясный дисплей

import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionListener; 
import java.awt.Graphics; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class mousedrag extends JFrame { 
    public mousedrag() { 
     drag canvas = new drag("JAVA"); 
     add(canvas); 
    } 

    public static void main(String[] args) { 
     mousedrag f = new mousedrag(); 
     f.setTitle("events"); 
     f.setSize(300, 200); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    static class drag extends JPanel { 
     String name = "welcome to java"; 
     int x = 20, y = 20; 

     public drag(String s) { 
     this.name = s; 
     addMouseMotionListener(new MouseMotionListener() { 

      @Override 
      public void mouseMoved(MouseEvent e) { 
       x = e.getX(); 
       y = e.getY(); 
       repaint(); 
      } 

      @Override 
      public void mouseDragged(MouseEvent e) {  
      } 
     }); 

     } 

     @Override 
     protected void paintComponent(Graphics g) { 
     g.drawString(String.format("%03d %03d", x, y), x, y); 
     } 
    } 
} 

и вот моя проблема:

screen

enter image description here

ответ

2

Вы состояние:

дисплей никогда не чистите обновление не происходит

Причина заключается в том, что вы не вызываете супер метод в методе paintComponent и поэтому компонент никогда не получает чтобы сделать уборку своего дома. Таким образом, чтобы исправить это, вызовите метод супер путем изменения:

@Override 
protected void paintComponent(Graphics g){ 
    g.drawString(String.format("%d %d", x,y), x, y); 
} 

в

@Override 
protected void paintComponent(Graphics g){ 
    super.paintComponent(g); // ********** 
    g.drawString(String.format("%d %d", x,y), x, y); 
} 
+0

ах ISEE, мой плохой спасибо сэр – thrax