Java 在JPanel、2D图形和鼠标侦听器方面有问题

Java 在JPanel、2D图形和鼠标侦听器方面有问题,java,arrays,graphics,Java,Arrays,Graphics,我的代码有问题,因为我试图为最终项目制作一个21点游戏,我的棋盘都是用2D图形制作的,图像可以工作,但当我尝试添加诸如键盘侦听器或鼠标侦听器,甚至JButtons之类的控件时,它们似乎从来都不起作用。目前,我正在尝试使用MouseStener,这样我就可以点击它说要点击的区域,但它似乎不想工作。我假设它与图形阻塞mouseListener功能有关,或者它没有被正确订购 我试着使用JPanel和contentPanes,但我无法让它们很好地相互配合 CardValue()仅从数组中确定一张随机卡,

我的代码有问题,因为我试图为最终项目制作一个21点游戏,我的棋盘都是用2D图形制作的,图像可以工作,但当我尝试添加诸如键盘侦听器或鼠标侦听器,甚至JButtons之类的控件时,它们似乎从来都不起作用。目前,我正在尝试使用MouseStener,这样我就可以点击它说要点击的区域,但它似乎不想工作。我假设它与图形阻塞mouseListener功能有关,或者它没有被正确订购

我试着使用JPanel和contentPanes,但我无法让它们很好地相互配合

CardValue()
仅从数组中确定一张随机卡,绘制效果良好

我还在底部添加了MouseListener类,这是一个独立于21点的类

如果有人能帮助我理解为什么MouseListener不会处理图形或解决我的问题,那将是令人惊讶的,因为我对编码非常陌生,不完全理解图形

import java.util.Random;
导入java.util.Stack;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyAdapter;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入java.io.File;
导入javax.imageio.imageio;
@抑制警告(“未使用”)
公共类21点扩展画布{
//声明图像、字符串和其他内容的变量
//图像卡,cardback1,cardback2,经销商,您;
静态字符串废话;
静态int dealerstotal=0;
公共静态堆栈卡=新堆栈();
//一个数组,它打印出一张随机卡片,并给我这些卡片的值以及名称
//所以我可以把它和一张有匹配名字的卡片的图像匹配起来
公共静态无效CardValue(){
对于(int i=1;i=10){
数字=10;
}
如果(数字==1){
}
经销商总数+=数量;
int新卡=(套装*13)+编号;
System.out.println(blah);
卡片。移除(新卡片);
}
public Blackjack()引发异常
{
//声明图像时,我会把所有这些都删除,因为我没有包括这些图像的下载
//Cards=ImageIO.read(新文件(blah+“.png”);
//dealer=ImageIO.read(新文件(“dealer.jpg”);
//you=ImageIO.read(新文件(“you.jpg”);
//cardback1=ImageIO.read(新文件(“redback.png”);
//cardback2=ImageIO.read(新文件(“blackback.png”);
}
//创建游戏板
公共空间涂料(图g)
{
int l=5;
颜色表=新颜色(74,179,0);
蓝色=新颜色(13,38,163);
String title=“欢迎来到克里斯赌场”;
字符串交易商=“交易商卡”;
字符串dealerst=“经销商总数:”+dealerstotal;
把你的牌串起来;
String yourt=“您的总数:”+l;
字符串游戏=“游戏是21点,好运”;
String-hit=“向上按以命中”;
String stand=“按下以站立”;
g、 setColor(表格);
g、 fillRect(0,01000010000);
//标题/图片
g、 设置颜色(颜色为黑色);
g、 fillRect(40,40254334);
g、 fillRect(40420254334);
//g、 drawImage(经销商,50,50,本);
//g、 drawImage(你,50430,这个);
g、 setFont(新字体(“Arial”,Font.BOLD,51));
g、 设置颜色(颜色为黑色);
g、 抽绳(标题400、90);
g、 setColor(颜色为黄色);
g、 抽绳(标题40393);
g、 setFont(新字体(“Arial”,Font.BOLD,30));
g、 设置颜色(颜色为黑色);
g、 抽绳(游戏,450,140);
g、 setColor(颜色为黄色);
g、 抽绳(游戏,452142);
g、 设置颜色(颜色为黑色);
g、 fillRect(400105595,5);
//经销商图形
//经销商卡
g、 抽绳(经销商430240);
g、 setColor(Color.red);
g、 fillRect(45026582105);
g、 fillRect(55026582105);
g、 fillRect(650、265、82、105);
g、 fillRect(75026582105);
g、 fillRect(850、265、82、105);
g、 抽绳(经销商,432242);
//g、 drawImage(卡片,455270,本);
//g、 drawImage(Cardback1555270,本);
//g、 drawImage(Cardback1655270,此版本);
//g、 drawImage(Cardback1755270,本);
//g、 drawImage(Cardback1855270,本);
//经销商总数
g、 设置颜色(颜色为黑色);
g、 抽绳(dealerst,730,240);
g、 setColor(Color.red);
g、 抽绳(dealerst,732,242);
//你的卡片
g、 setColor(Color.white);
g、 抽绳(你的,452440);
g、 设置颜色(蓝色);
g、 fillRect(450465,82105);
g、 fillRect(550、465、82、105);
g、 fillRect(650、465、82、105);
g、 fillRect(750465,82105);
g、 fillRect(850、465、82、105);
g、 抽绳(你的,450438);
//g、 drawImage(Cardback2455470,本);
//g、 drawImage(Cardback2555470,本);
//g、 drawImage(Cardback2655470,本);
//g、 drawImage(Cardback2755470,本);
//g、 drawImage(Cardback2855470,本);
g、 setColor(Color.white);
g、 抽绳(你的,750440);
g、 设置颜色(蓝色);
g、 抽绳(yourt,748438);
g、 设置颜色(颜色为黑色);
g、 fillRect(111620010070);
g、 设置颜色(颜色为黑色);
g、 fillRect(103230010070);
g、 setColor(Color.white);
g、 抽绳(hit,1134245);
g、 抽绳(支架,1050345);
}
//每当我添加“frame.add(new Blackjack());”mouseStener不起作用时,我的问题就出现在这里
//mouseListener仅在我没有“frame.add(new Blackjack());”时工作
//我猜这是与mouseListener/JFrame上的图形有关的问题
//使其无法工作
公共静态
public static void Frame() throws Exception {
    JFrame frame = new JFrame("Kris' Casino");
    frame.setSize(500,500);
    frame.getContentPane().addMouseListener(new ClickListener());  // *** 1 ***
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.add(new Blackjack());                                    // *** 2 ***
    frame.setVisible(true);

}