2015-08-08 108 views
0

所以这是我下面的代码:MouseListener的故障排除

package myProjects; 

import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.event.*; 

public class SecondTickTacToe extends JFrame{ 

public JPanel mainPanel; 
public static JPanel[][] panel = new JPanel[3][3]; 

public static void main(String[] args) { 
    new SecondTickTacToe(); 
} 
public SecondTickTacToe(){ 
    this.setSize(300, 400); 
    this.setTitle("Tic Tac Toe"); 
    this.setLocationRelativeTo(null); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 

    mainPanel = new JPanel(); 

    for(int column=0; column<3; column++){ 
     for(int row=0; row<3; row++){ 
      panel[column][row] = new JPanel(); 
      panel[column][row].addMouseListener(new Mouse()); 
      panel[column][row].setPreferredSize(new Dimension(85, 85)); 
      panel[column][row].setBackground(Color.GREEN); 
      addItem(panel[column][row], column, row); 
     } 
    } 

    this.add(mainPanel); 
    this.setVisible(true); 
} 
private void addItem(JComponent c, int x, int y){ 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = x; 
    gbc.gridy = y; 
    gbc.weightx = 100.0; 
    gbc.weighty = 100.0; 
    gbc.fill = GridBagConstraints.NONE; 
    mainPanel.add(c, gbc); 
    } 
} 
class Mouse extends MouseAdapter{ 
    public void mousePressed(MouseEvent e){ 
     (JPanel)e.getSource().setBackground(Color.BLUE); 
    } 
} 

,但我得到就行

(JPanel)e.getSource().setBackground(Color.BLUE); 

错误,我不知道为什么?我试图检索使用getSource()单击了哪个面板,但它似乎不起作用。有没有人有办法解决吗?谢谢。

回答

2

getSource返回一个Object,这显然没有setBackground方法。

演员的评价不是试图访问setBackground方法之前完成的,所以你需要封装投第一

喜欢的东西...

((JPanel)e.getSource()).setBackground(Color.BLUE); 

...的示例

通常,我不喜欢做这样的盲目演员,并且因为我看不到任何实际使用Mouse类的位置,所以很难说这是否会导致ClassCastException

通常情况下,我更愿意首先做一个小检查...

if (e.getSource() instanceof JPanel) { 
    ((JPanel)e.getSource()).setBackground(Color.BLUE); 
} 

...例如

+0

哇......我不能相信我没有意识到这一点。但是,嘿,现在我知道不这样做!谢谢。 (一旦冷却结束,我会将你的答案标记为已解决) –