2013-07-31 2 views
1

Эта программа предполагает смещение двух прямоугольников на 10 точек вправо каждый раз, когда я нажимаю на экран с координатой x 300 или выше, но это не так, в чем проблема?местоположение мыши и графическое изображение

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.io.IOException; 

/** 
* Created with IntelliJ IDEA. 
* To change this template use File | Settings | File Templates. 
*/ 
public class MasterMind extends JComponent implements ActionListener,MouseListener { 
    //private MouseEvent me; 
    private int screenX=0; 
    private int screenY=0; 
    private ActionEvent e; 
    private int xX=10; 

    public MasterMind() throws IOException { 
    } 

    public static void main(String [] args) throws IOException { 
     JFrame window = new JFrame("Master Mind"); 
     MasterMind game= new MasterMind(); 
     window.add(game); 
     window.pack(); 
     window.setLocationRelativeTo(null); 
     window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     window.setVisible(true); 
     Timer t = new Timer(30, game); 
     t.start(); 
     window.addMouseListener(game); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(800,600); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     g.setColor(Color.red); 
     g.drawRect(xX,30,200,200); 
     g.setColor(Color.red); 
     g.drawString("x,y coordinates: "+screenX+" , "+screenY,400,100); 

     g.setColor(Color.blue); 
     g.drawRect(xX+3, 33, 194, 194); 
    } 

    @Override 
    public void mousePressed(MouseEvent me) {  
    } 
    @Override 
    public void mouseReleased(MouseEvent me) { 
     repaint(); 
    } 
    @Override 
    public void mouseEntered(MouseEvent me) { 
    } 
    @Override 
    public void mouseExited(MouseEvent me) { 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
      MouseEvent mouseIvent = (MouseEvent) e; 
      int screenX = mouseIvent.getX(); 
      int screenY = mouseIvent.getY(); 
      System.out.println("screen(X,Y) = " + screenX + "\t" + screenY); 
      repaint(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     //To change body of implemented methods use File | Settings | File Templates. 
     if (screenX>300) { 
     xX=xX+10; } 
     //timer animation 

     repaint(); 
    } 
} 

Я очень новичок в Java. поэтому, пожалуйста, ответьте, если я могу спросить. Спасибо вам всем.

+0

В вашем 'метода mouseClicked' , вы снова объявили 'screenX' как локальную переменную, скрыв переменную-член. Член-переменная никогда не изменяется; его значение всегда равно 0. – Qwerky

ответ

2

Эти линии должны быть в методе mouseClicked, а не в actionPerformed.

if (screenX > 300) { 
    xX = xX + 10; 
} 

непосредственно перед существующим repaint способ есть. Они обеспечивают, чтобы переменная координаты X xX была обновлена ​​для использования позже в методе paintComponent.

Unrelated но убедитесь, что для вызова super.paintComponent(g) в качестве первого утверждения paintComponent

1

Наденьте это, в вашем MouseClicked или MousePressed или MouseReleased Метода

if(me.getX()>300) 
      xX=xX+10; 
repaint(); 
Смежные вопросы