1.界面的预处理与刷新

我们要绘制五子棋棋盘,首先必须明确一点:不管我们在棋盘上怎么操作,棋盘的网格线是不可能改变的。无论是下棋,悔棋,网格线都会在那。故而我们应该知道,要想网格线始终存在,我们需要在后台存在一个绘制代码,一直不断的画这些网格线,同样在这一个代码区将来我们下了棋子之后也要不断的在下棋的位置画上棋子。

那么这样的代码区在哪呢?我们知道我们绘制界面的大框架是JFrame,其他的组件不断的往JFrame里加,我们查看调用可以发现,这些组件包括JFrame都继承于同一个类Component,而在这个类中正好就有我们所要找的代码区,也就是函数paint(Graphics g)与repaint()。

paint()是提供给用户编程的,往往声明在接口之中,然后用户实现该接口,以拥有重绘的功能。若要定制某个图形组件的界面,可以重写paint()方法,记得一般习惯这样改写:

void paint(Graphics g){

super.paint(g);

// your code

}

而repaint是刷新,里面不光有调用paint()函数刷新背景,也会刷新该组件上的所有组件。当对于界面或组件执行了某类操作,改变了界面上的图象时,jvm收到界面被调整的信息,此时会调用visible是ture的图形组件的repaint()方法对界面重绘。当然,直接重绘或全部重绘是很亏的,一个是用双缓存技术,另一个是只对桌面上显示的部分重绘。双缓存是指在缓存内先模拟重绘过程,只把最后成形的结果传给显示器显示。部分重绘就是指使用repaint(Dimensionarea)及类似的方法,只重绘与需调整的部分相关的界面。幸运的是,目前jdk提供的repaint()并不是傻呼呼的就直接重绘所有组件,已经用了上述两种方法优化过了。所以即使反复调用repaint()也不会有效率的损失。

repaint()是重要概念,它是在图形线程后追加一段重绘操作,是安全的!是系统真正调用的重绘!所以如果你需要某个部件刷新一下界面,记得调用repaint(),千万不要直接调用paint()!因为paint()只用于预处理中设定背景所用,不能被外界调用,而repaint是可以的。

概括起来,如果想给你的界面设定一个亘古不变的背景,重写paint()函数,但如果你后期要改变界面内容,改完后用repaint()刷新。

2.五子棋盘的绘制

一般为了方便绘图,或者界面美观,五子棋棋盘的横线数和纵线数是相同的,界面大小也采用近似正方形的宽高比。

首先新建一个项目,新建一个主类,并在主类里加上主函数。因为要重写界面的paint()代码,在paint()中加上绘制背景棋盘的代码,因此这个类要继承这个界面的框架——JFrame。

下面是简单的五子棋棋盘绘制代码,你可以回去自己写出五子棋棋盘代码,长宽以及几乘几的格子都由你自己决定。

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JFrame;

public class Test extends JFrame {

public void initUI() {

this.setTitle("五子棋v0.1");

this.setSize(1000, 1000);

this.setResizable(false);//大小不可变

this.setLocationRelativeTo(null);//默认居中

this.setDefaultCloseOperation(3);//按下叉号默认关闭

this.getContentPane().setBackground(new Color(240, 233, 217));//修改背景颜色

this.setVisible(true);

}

public void paint(Graphics g) {

super.paint(g);

drawChessTable(g);

}

public void drawChessTable(Graphics g) {

for (int i = 0; i < 19; i++)

g.drawLine(50, 50 + i * 50, 50

+ (19 - 1) * 50, 50 + i

* 50);

for (int j = 0; j < 19; j++)

g.drawLine(50 + j * 50, 50, 50 + j

* 50, 50 + (19 - 1)

* 50);

}

public static void main(String args[]){

new Test().initUI();

}

}

运行之后结果是这样的:

java五子棋页面设计编程_Java程序设计:五子棋(一)——编写界面相关推荐

  1. Java程序设置的目的_java程序设计教学大纲的课程性质与目的.doc

    java程序设计教学大纲的课程性质与目的 <Java程序设计> Java Language Programming Design 教学大纲 一.课程性质与目的 JAVA程序设计是计算机专业 ...

  2. java贪吃蛇设计流程_JAVA版贪食蛇(贪吃蛇)游戏的设计与实现(含录像)

    JAVA版贪食蛇(贪吃蛇)游戏的设计与实现(含录像)(任务书,开题报告,外文翻译,毕业论文12000字,程序代码,MySQL数据库,答辩PPT,答辩视频录像) 摘要 "贪食蛇"游戏 ...

  3. 福州大学java期末试卷2012_福州大学_java程序设计期末a卷.doc

    福州大学_java程序设计期末a卷.doc 第1页共17页福州大学2007-2008学年第一学期考试A卷课程名称Java程序设计考试日期2008.1.14考生姓名学号专业或类别题号一二三四五总分题分3 ...

  4. java高级课程设计报告书_java高级课程设计报告模板

    java高级课程设计报告模板 Java 高级课程设计报告 课程设计名称:Java高级课程设计 学 期:13-14-1 班 级:计网1231班 姓 名:黄磊 指 导 老 师:刘志生.白党强 一.课程设计 ...

  5. java游戏课程设计报告_java课程设计报告游戏_相关文章专题_写写帮文库

    时间:2019-05-14 00:00:44 作者:admin 课 程 设 计 课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 ...

  6. java基于http协议编程_Java中基于HTTP协议网络编程

    java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来访问Web服务功能,这篇博客,就跟大家分享一下,Java中的网络编程的知识,主要是学习下该java.net包下的API. U ...

  7. java 多线程和并行编程_Java 8中的并行和异步编程

    java 多线程和并行编程 并行代码是在多个线程上运行的代码,曾经是许多经验丰富的开发人员的噩梦,但是Java 8带来了许多更改,这些更改应该使这种提高性能的窍门更加易于管理. 并行流 在Java 8 ...

  8. java套接字编程_Java套接字编程:教程

    java套接字编程 本教程是Java套接字编程的简介,从一个简单的客户机-服务器示例开始,该示例演示了Java I / O的基本功能. 将向您介绍原始的java.io软件包和NIO,即Java 1.4 ...

  9. java台球游戏设计原理_java实现一个桌球小游戏

    本文实例为大家分享了java实现桌球小游戏的具体代码,供大家参考,具体内容如下 在ecplise中新建一个JAVA项目 建立四个class分别对应游戏登陆界面,游戏界面,数据库操作,和一个开始类 代码 ...

最新文章

  1. 声音大小与振幅的关系_原来声音的属性有这三种!
  2. 关于开发自我训练课程
  3. linux终端里CTRL-Z和CTRL-C的区别
  4. c#二叉树 取叶子节点个数_二叉树的最小深度+完全二叉树的节点个数
  5. AciveMQ小结|最后有视频
  6. Careercup - Google面试题 - 4877486110277632
  7. python idle使用anaconda中库怎么用_如何使用Anaconda学习Python
  8. mongodb 持久化 mysql_最详细的python爬虫指南(四):持久化操作(mongoDB、mysql)...
  9. 单片机单口不可用或被占用_单片机为什么一直用C语言,不用其他编程语言?只有学过的知道...
  10. 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具
  11. 【note】the swift programming language Swift教程笔记
  12. oracle学习笔记之pI/sql视频小结
  13. 必读论文|20篇聊天机器人领域必读论文速递
  14. 【手机连接adb的两种方法】
  15. 高中计算机网络技术应用教案,高中信息技术选修3《网络技术应用》教案.doc
  16. json模块的转义dump 和反转义 loap
  17. PCB 铜厚厚度和线宽的选择
  18. YOLOV5训练代码train.py注释与解析
  19. 插入摄像头时,系统右下角提示:无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常...
  20. 《机动车交通事故责任强制保险费率浮动暂行办法》媒体见面会实录

热门文章

  1. 基于Unity引擎的2D像素风Roguelike地下城游戏Demo
  2. 马哥教育M30上课实验环境配置
  3. oracle求部门请假类别合计_oracle数据库题目
  4. 易优cms 后台SEO设置友情链接怎么换? Eyoucms快速入门
  5. 安卓主板的双屏异显带双触摸功能
  6. 为什么价格不等的蓝牙耳机音质相差这么大?双11哪款蓝牙耳机好用?
  7. 【Oculus SDK】星空 VR
  8. AC日记——神奇的幻方 洛谷 P2615(大模拟)
  9. 每日一句:名言、鸡汤、哲学、思考、坚持、爱、生命、自我
  10. 复杂句变简单句 java_英语简单句变复杂句的精华!