2013-07-02 136 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