2013-07-02 2 views
1

나는 자바 2d 그래픽에 익숙하지 않으며 mouseclick 이벤트를 처리하는 데 문제가있다. 클릭 한 상태로 마우스 상태를 업데이트 한 후에도 아무 일도 일어나지 않는 이유를 말해 줄 수 있습니까? 배열에서 0 2의 이미지를 다른 이미지로 변경하고 싶습니다. 아무 일도 일어나지 않아. 사전에 도움을 주셔서 감사합니다.2d 자바 그래픽

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

는 당신을위한 MouseListener를 등록하셔야합니다 BoardJPanel 그래서 mouseKeyStatus

addMouseListener(this); 

은 제외하고 호출 할 수 있습니다 : 스윙에서 사용자 지정 그림을 구현할 때 paintComponent보다는 paint을 무시하고 super.paintComponent(g)를 호출해야합니다.

+0

감사합니다,이 나를 위해 일하는 것 또한 paintComponent 힌트를 주셔서 감사합니다 확실히 그것을 확인합니다. – LukeG