2013-07-02 119 views
1

我是新来的java 2d图形,我有问题处理mouseclick事件。 是否有可能告诉我为什么在更新鼠标状态点击后没有任何事情发生? 我想要做的是将数组中的图像在0 2更改为另一个图像。没有什么反应寿。感谢您的帮助提前。2d java图形

import java.awt.Graphics; 
import java.awt.Graphics2D; 

import java.awt.Image; 
import java.awt.event.*; 
import java.awt.*; 

import javax.swing.ImageIcon; 
import javax.swing.*; 

public class Board extends JPanel implements MouseListener { 

private static boolean[] keyboardState = new boolean[525]; 
private static boolean[] mouseState = new boolean[3]; 
private static Image[][] images; 


Image house; 
int w = 0; 
int h = 0; 

int xPos; 
int yPos; 
    ImageIcon ii = new ImageIcon(this.getClass().getResource("house.gif")); 
    ImageIcon iii = new ImageIcon(this.getClass().getResource("house1.gif")); 

public Board() { 
    house = ii.getImage();  
    h = house.getHeight(null); 
    w = house.getWidth(null); 
    images = new Image[10][10]; 
    for(int i = 0; i < 10; i++) 
    { 
     for(int j = 0; j < 10; j++) 
     { 
      images[i][j] = house; 
     }   
    } 
} 

public void paint(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    for(int i = 0; i < 10; i++) 
    { 
     for(int j = 0; j < 10; j++) 
     { 
      g2d.drawImage(images[i][j],w*i,h*j,null);      
     } 
    } 
    //g2d.drawImage(house,15,15,null); 
} 

public void checkMouse() 
{ 
    if(mouseState[0]) 
    { 
     images[0][2] = iii.getImage(); 
     repaint(); 
     super.repaint(); 
    } 
} 

@Override 
public void mousePressed(MouseEvent e) 
{ 
    mouseKeyStatus(e, true); 
    checkMouse(); 
} 

@Override 
public void mouseReleased(MouseEvent e) 
{ 
    mouseKeyStatus(e, false); 
    repaint(); 
} 

public static boolean mouseButtonState(int button) 
{ 
    return mouseState[button - 1]; 
} 

private void mouseKeyStatus(MouseEvent e, boolean status) 
{ 
    if(e.getButton() == MouseEvent.BUTTON1) 
     mouseState[0] = status; 
    else if(e.getButton() == MouseEvent.BUTTON2) 
     mouseState[1] = status; 
    else if(e.getButton() == MouseEvent.BUTTON3) 
     mouseState[2] = status; 
} 

回答

3

需要为注册一个MouseListenerBoardJPanel,使mouseKeyStatus可以称为

addMouseListener(this); 

旁白:在Swing实现自定义涂装时覆盖paintComponent而不是paint并记住调用super.paintComponent(g)

+0

谢谢,这似乎为我工作,也感谢paintComponent提示,将检查它的确定。 – LukeG