如标题,我写了个五子棋,当前问题是我不能给页面上添加控件,因为我用了个图片做的背景,请问我应该怎么修改我的代码那?private static final long serialVersionUID = 1L;
//背景图片
BufferedImage bgImage = null;
FiveCheseAlgorithm f = new FiveCheseAlgorithm();
private int X = 0;
private int Y = 0;
//存放在allChess中的数据
//0表示没有棋子,1表示黑子,2表示白字
private int [][] allChess = new int[19][19];
boolean flag = false; //false表示黑子,true表示白字
boolean checkdownChess = true; //是否连接服务器
int param1 = 0; //x轴的坐标
int param2 = 0; //y轴的坐标
//客户端界面的画面
private JComboBox jcomboBox;
private JLabel jlsname; //服务器名
private JTextField jtfsname;
public ClientFiveChese(){
this.setTitle("五子棋");
this.setSize(500, 500);
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
//窗体出现的位置
this.setLocation((width-500)/2,(height-500)/2);
//窗体的大小不能改变
this.setResizable(false);
//窗体关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
bgImage = ImageIO.read(new File("e:\\background.jpg"));
System.out.println(bgImage);
} catch (IOException e) {
e.printStackTrace();
}
addMouseListener(this);
}
public void paint(Graphics g) {
//绘制背景
g.drawImage(bgImage, 0, 20, this);
//绘制标题信息
g.setFont(new Font("黑体",Font.BOLD,20));
g.drawString("游戏信息:", 120, 60);
g.setFont(new Font("宋体",20,20));
g.drawString("黑方时间:无限制", 30, 480);
g.drawString("白方时间:无限制", 250, 480);
f.drawImageShow(X, Y, allChess, g);
} public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
} public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
} public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
} public void mousePressed(MouseEvent e) {
X = e.getX();
Y = e.getY();
if(checkdownChess){
if(X >= 10 && X <= 370 && Y >= 70 && Y <= 430 ){
int paramx = ((int)(X-(Math.rint((X-10)/20))*20))/2;
int paramy = ((int)(Y-(Math.rint((Y-70)/20))*20))/2;
if(paramx >= 10){ //如果点击的点的x坐标大于10则显示x轴在右边的交点处
X = 10 + (X-10)/20 * 20 + 20;
}else{ //如果点击的点的x坐标小于10则显示在x轴左边的交点处
X = 10 + (X-10)/20 * 20;
}
if(paramy >= 40){//如果点击的点的y坐标大于40则显示y轴在右边的交点处
Y = 70 + (Y - 70)/20 * 20 + 20;
}else{//如果点击的点的y坐标大于40则显示y轴在右边的交点处
Y = 70 + (Y - 70)/20 * 20;
}
param1 =(X -10)/20; //获取x坐标添加到二维数组中
param2 = (Y - 70)/20; //获取y坐标添加到二维数组中
if(allChess[param1][param2] == 1 || allChess[param1][param2] == 2){
JOptionPane.showMessageDialog(this, "此处已经有棋子了,不能下载此处");
}else{
if(!flag){
allChess[param1][param2] = 1;
flag = true;
}else{
allChess[param1][param2] = 2;
flag = false;
}
repaint(); //点击在棋盘上则重新绘制图片
boolean checkFlagHorizontal = f.checkFiveChessHorizontal(param1,param2,allChess); //横向够成五子
boolean checkFlagVertical = f.checkFiveChessVertical(param1,param2,allChess); //竖向够成五子
boolean checkFlagHorizontalVertical = f.checkFiveChessHorizontalVertical(param1,param2,allChess);//反斜杠够五子
boolean checkFlagVerticalHorizontal = f.checkFiveChessVerticalHorizontal(param1,param2,allChess); //正斜杠够五子
if(checkFlagHorizontal || checkFlagVertical || checkFlagHorizontalVertical ||checkFlagVerticalHorizontal){
JOptionPane.showMessageDialog(this, "成功");
}
}
}
}
}
//背景图片
BufferedImage bgImage = null;
FiveCheseAlgorithm f = new FiveCheseAlgorithm();
private int X = 0;
private int Y = 0;
//存放在allChess中的数据
//0表示没有棋子,1表示黑子,2表示白字
private int [][] allChess = new int[19][19];
boolean flag = false; //false表示黑子,true表示白字
boolean checkdownChess = true; //是否连接服务器
int param1 = 0; //x轴的坐标
int param2 = 0; //y轴的坐标
//客户端界面的画面
private JComboBox jcomboBox;
private JLabel jlsname; //服务器名
private JTextField jtfsname;
public ClientFiveChese(){
this.setTitle("五子棋");
this.setSize(500, 500);
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
//窗体出现的位置
this.setLocation((width-500)/2,(height-500)/2);
//窗体的大小不能改变
this.setResizable(false);
//窗体关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
bgImage = ImageIO.read(new File("e:\\background.jpg"));
System.out.println(bgImage);
} catch (IOException e) {
e.printStackTrace();
}
addMouseListener(this);
}
public void paint(Graphics g) {
//绘制背景
g.drawImage(bgImage, 0, 20, this);
//绘制标题信息
g.setFont(new Font("黑体",Font.BOLD,20));
g.drawString("游戏信息:", 120, 60);
g.setFont(new Font("宋体",20,20));
g.drawString("黑方时间:无限制", 30, 480);
g.drawString("白方时间:无限制", 250, 480);
f.drawImageShow(X, Y, allChess, g);
} public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
} public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
} public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
} public void mousePressed(MouseEvent e) {
X = e.getX();
Y = e.getY();
if(checkdownChess){
if(X >= 10 && X <= 370 && Y >= 70 && Y <= 430 ){
int paramx = ((int)(X-(Math.rint((X-10)/20))*20))/2;
int paramy = ((int)(Y-(Math.rint((Y-70)/20))*20))/2;
if(paramx >= 10){ //如果点击的点的x坐标大于10则显示x轴在右边的交点处
X = 10 + (X-10)/20 * 20 + 20;
}else{ //如果点击的点的x坐标小于10则显示在x轴左边的交点处
X = 10 + (X-10)/20 * 20;
}
if(paramy >= 40){//如果点击的点的y坐标大于40则显示y轴在右边的交点处
Y = 70 + (Y - 70)/20 * 20 + 20;
}else{//如果点击的点的y坐标大于40则显示y轴在右边的交点处
Y = 70 + (Y - 70)/20 * 20;
}
param1 =(X -10)/20; //获取x坐标添加到二维数组中
param2 = (Y - 70)/20; //获取y坐标添加到二维数组中
if(allChess[param1][param2] == 1 || allChess[param1][param2] == 2){
JOptionPane.showMessageDialog(this, "此处已经有棋子了,不能下载此处");
}else{
if(!flag){
allChess[param1][param2] = 1;
flag = true;
}else{
allChess[param1][param2] = 2;
flag = false;
}
repaint(); //点击在棋盘上则重新绘制图片
boolean checkFlagHorizontal = f.checkFiveChessHorizontal(param1,param2,allChess); //横向够成五子
boolean checkFlagVertical = f.checkFiveChessVertical(param1,param2,allChess); //竖向够成五子
boolean checkFlagHorizontalVertical = f.checkFiveChessHorizontalVertical(param1,param2,allChess);//反斜杠够五子
boolean checkFlagVerticalHorizontal = f.checkFiveChessVerticalHorizontal(param1,param2,allChess); //正斜杠够五子
if(checkFlagHorizontal || checkFlagVertical || checkFlagHorizontalVertical ||checkFlagVerticalHorizontal){
JOptionPane.showMessageDialog(this, "成功");
}
}
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货