MouseListener 故障排除
MouseListener trouble shooting
所以这是我的以下代码:
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() 单击了哪个面板,但它似乎不起作用。有没有人有办法解决吗?谢谢
getSource
returns 一个 Object
显然没有 setBackground
方法。
在尝试访问 setBackground
方法之前未完成转换的评估,因此您需要先封装转换
类似...
((JPanel)e.getSource()).setBackground(Color.BLUE);
...例如
通常情况下,我不喜欢这样盲目投射,而且由于我看不到你实际使用 Mouse
class 的任何地方,所以很难说这是否将导致 ClassCastException
或不。
通常,我更喜欢先做一些检查...
if (e.getSource() instanceof JPanel) {
((JPanel)e.getSource()).setBackground(Color.BLUE);
}
...例如
所以这是我的以下代码:
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() 单击了哪个面板,但它似乎不起作用。有没有人有办法解决吗?谢谢
getSource
returns 一个 Object
显然没有 setBackground
方法。
在尝试访问 setBackground
方法之前未完成转换的评估,因此您需要先封装转换
类似...
((JPanel)e.getSource()).setBackground(Color.BLUE);
...例如
通常情况下,我不喜欢这样盲目投射,而且由于我看不到你实际使用 Mouse
class 的任何地方,所以很难说这是否将导致 ClassCastException
或不。
通常,我更喜欢先做一些检查...
if (e.getSource() instanceof JPanel) {
((JPanel)e.getSource()).setBackground(Color.BLUE);
}
...例如