Java:五子棋设计(一)窗口与界面

Java:五子棋设计(一)窗口与界面

一个完整的五子棋项目包括很多部分:窗口与界面设计、各种功能实现、AI算法设计等等。本篇文章主要介绍基本的窗口和界面设计,以及监听器画笔的使用。建议经常阅读Java API中文手册,里面用清晰的逻辑框架详尽地介绍了Java软件包里各种类与其包含的方法。

1.1窗口

我们在启动一个游戏时,首先会进入主界面窗口,然后有开始游戏、菜单等按钮选项。除了主界面窗口,在五子棋项目设计中还有胜利窗口、悔棋窗口等等小弹窗,因此我们需要创建多个窗口,并在窗口上添加各种组件(按钮、字段、图片、标签、文本框等等)。在这里以主界面窗口为例进行介绍。(以下三个代码块为一整段代码拆分而成)

1.1.1创建窗口对象

在Java.awt软件包中有一个Frame窗口类,JFrame是Frame的一个子类,我们需要创建一个JFrame对象。

窗口类中包含了多种方法,大家如果想要了解更多的话可以自己创建一个窗口对象,调用不同的方法设置不同的参数尝试一下,看看哪种效果是自己最想要的。

public void initUI() {
    //单独写一个方法,在方法体中创建窗口,然后再在主函数中调用本方法
    
	ChessBoard jf=new ChessBoard();
    //ChessBoard继承了JFrame类,因此可用ChessBoard直接创建窗口对象
    
	jf.setSize(1000, 850);		//窗口大小
	jf.setTitle("五子棋");		  //窗口标题  	
	jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 	//关闭窗口时结束程序
	jf.setLocationRelativeTo(null);		//窗口在屏幕中居中显示
	jf.setResizable(false);				//窗口大小不可调整
	//以上为窗口类的多个方法

在这里插入图片描述

1.1.2添加组件

刚刚我们只是创建了一个空白的窗口,常见的窗口还会包括按钮、字段、文本框、标签或图片等等,以上都称为窗口的组件。为窗口添加组件需要先创建一个该类的对象,然后通过窗口类的add方法将对象添加到窗口上。各种组件也有许多方法,大家可以自己尝试调用。

	FlowLayout layout=new FlowLayout();
    jf.setLayout(layout);
    //FlowLayout为窗口的一种布局模式——流式布局
    //需要先创建一个流式布局对象,再把窗口的布局设置为该布局对象

    JButton bt2=new JButton("人机对战");//括号中的参数为按钮上的内容
    bt2.setBackground(Color.pink);
	bt2.addActionListener(game);
    //JButton为按钮类,可作为一个组件添加到窗口上
    //JButton类中有多个方法,比如设置按钮颜色,添加监听器(后面有介绍)等等

	jf.add(bt2);
	//为窗口添加组件,此处添加了一个按钮组件,还可以添加许多其他的组件
1.1.3窗口可视化

在创建了窗口对象,设置好参数并添加了各种组件之后,要想窗口能够出现在屏幕上就需要进行窗口可视化。

	jf.setVisible(true);
	//若将括号内的参数改为false,窗口便不可见
}

1.2监听器

首先介绍一下监听器类。监听器类中的方法没有方法体,因此不能够直接创建对象,需要自己创建一个类继承监听器类,重写方法体,然后再创建该类的对象。继承的方式为接口,implements而不是extends,如果一个类同时有继承与接口,那么先写extends再写implements,若有多个监听器,用逗号分隔。

1.2.1接口继承监听器类

Program类继承了动作监听器的接口以及MouseAdapter(MouseAdapter继承了MouseListener,可以理解为鼠标监听器,详情请查阅API)。

在Program中重写动作监听器的方法ActionPerformed

public class Program extends MouseAdapter implements ChessBoardConfig,ActionListener {
	public void actionPerformed(ActionEvent e) { 
    //重写监听器类的方法体
		String str=e.getActionCommand();
        //将鼠标点击的按钮的内容存入字符串str中
        //点击了不同的按钮,便可以根据字符串内容调用相应的方法
		if(str=="双人对战") 
			this.newgame();
		if(str=="悔棋") {
			regret.setVisible(true);
			System.out.println("打开悔棋窗口");
		}
		if(str=="重新开始")
			this.newgame();
	}
}
1.2.2监听器的使用

监听器,顾名思义可以监听电脑的动作,常用的监听器有鼠标监听器、键盘监听器、动作监听器等等。

例如你设置了一个按钮,点击按钮能够触发某个方法,那么电脑如何才能知道你点击了按钮呢?我们可以在按钮上添加动作监听器,这样按钮就能够知道自己被点击了,并在被点击之后调用某个方法。

再比如你想要通过鼠标在窗口上画出一条线,以鼠标按下和释放的位置为线段的两个端点,那么便需要在窗口上添加鼠标监听器来监听鼠标的动作,让窗口知道鼠标在哪里被按下和释放,然后画出一条线段。

//以下代码均写在上文的initUI方法中
	JButton bt1=new JButton("双人对战");
	JButton bt2=new JButton("人机对战");
	JButton bt3=new JButton("悔棋");
	JButton bt4=new JButton("重新开始");

	Program game=new Program();//创建Program类的对象

	//Program继承了动作监听器,因此在按钮上添加动作监听器——Program类的对象game
	//执行到以下语句时,电脑会进入Program类中寻找监听器的方法体
	bt1.addActionListener(game);
    bt2.addActionListener(game);
    bt3.addActionListener(game);
    bt4.addActionListener(game);

1.3画笔

一个窗口上有按钮等等组件,那如果想要一个窗口成为一个画板,通过鼠标在窗口上画出一条线段要如何实现呢?

首先我们需要在窗口上添加一个鼠标监听器,来获取线段的两个端点,但如果要让窗口上出现一条黑色的线,我们还需要一支画笔在窗口上作图。

//以下代码写在initUI方法中
	
	Graphics g;
	//定义画笔时不需要new

	g=jf.getGraphics();
	//获取窗口画笔
	//意思是这个画笔会用在窗口上,在窗口上作画

	game.g=g;
	//Program的game对象中有一个画笔成员
	//我们需要将各个类中的画笔进行统一,相互传送,使得所有画笔统一为窗口上的画笔,这样在其它类中“拿起画笔”时,便可直接在窗口上作画

我刚刚学会使用画笔时经常会出现“画不出来”的情况,一般都是忘记进行画笔的传递。画笔的传递就像投屏一样,你在手机上的操作能够呈现在电视上,同样地,将画笔传递之后就可使其它类中画笔的操作呈现在窗口上。

本篇文章简单介绍了能够让五子棋“有个样子”的一些基本配置,其余的算法会在后续的文章中持续更新。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值