2013-07-31 73 views
1

這個程序假設每次點擊屏幕上的x座標300或更大時,將這兩個矩形向右移10點,但它沒有,問題是什麼?鼠標位置和圖形繪畫

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方法中使用。

無關,但一定要調用super.paintComponent(g)paintComponent

1

的第一條語句將這個,在你的mouseClicked的mousePressed的mouseReleased方法

if(me.getX()>300) 
      xX=xX+10; 
repaint();