Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JLabel和JButton获取强制转换错误_Java_Swing_Jbutton_Jlabel_Classcastexception - Fatal编程技术网

Java 使用JLabel和JButton获取强制转换错误

Java 使用JLabel和JButton获取强制转换错误,java,swing,jbutton,jlabel,classcastexception,Java,Swing,Jbutton,Jlabel,Classcastexception,我正在做一个纸牌游戏,玩家可以点击抽牌按钮抽一张牌,也可以玩一张牌。 问题是,每当我点击draw时,它都会给我带来施法错误,但我对JLabel的施法只有在他们点击一张卡时才会出现 错误只发生在我点击绘图时 public void mousePressed(MouseEvent arg0) { double x = MouseInfo.getPointerInfo().getLocation().getX(); double y = MouseInfo.g

我正在做一个纸牌游戏,玩家可以点击抽牌按钮抽一张牌,也可以玩一张牌。 问题是,每当我点击draw时,它都会给我带来施法错误,但我对
JLabel
的施法只有在他们点击一张卡时才会出现

错误只发生在我点击绘图时

public void mousePressed(MouseEvent arg0) 
    {
        double x = MouseInfo.getPointerInfo().getLocation().getX();
        double y = MouseInfo.getPointerInfo().getLocation().getY();
        if(x>=draw.getX()&&x<=draw.getX()+draw.getWidth() && y>=draw.getY() && y<=draw.getY()+draw.getHeight())
        {
            //change later so anonymous
            say("\nPlayer "+UNO.getturn()+" drew a "+UNO.getdeckontop());
            UNO.draw();
            UNO.nextturn();
            smalllennie();
            return;
        }
        else
        {
            JLabel label = (JLabel)arg0.getSource();
            int index = currentdeck.indexOf(label);

你为什么要用
MouseListener
作为
JButton
?您应该使用
ActionListener
,因为它们已经被设计为在单击时触发动作事件。另外,正如其他人在上一个问题上所说的那样,您可以通过执行
arg0.getX()
/
arg0.getXOnScreen()
arg0.getY()
/
arg0.getYOnScreen()
而不是使用
MouseInfo
,来获得
MouseEvent的x和y坐标。好的,谢谢,我会试试看!您在添加侦听器时太粗心了。如果侦听器希望源是JLabel,则仅将侦听器添加到JLabel。同样,如果您的侦听器希望源是JButton,则只将其添加到JButton。是的,按钮通常应该优先使用ActionListener而不是MouseListener(尽管有一些例外)。是的,我现在明白了。非常感谢你们!提问时,请添加或。
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
  javax.swing.JButton cannot be cast to javax.swing.JLabel  
at Graphic.mousePressed(Graphic.java:146)