//为0,表示该位置没有棋子;1表示该位置下过黑子;2白子

int[][] allChess = new int[19][19];//同时还通过下标记录了棋子的相对位置

1.对话框:

确认对话框(0是,1否,2取消):(1)在窗体类中:int result = JOptionPane.showConfirmDialog(this, "hello everyone!");

                (2)在类之外:int result = JOptionPane.showConfirmDialog(new JFrame(), "hello everyone!");

                       或int result = JOptionPane.showConfirmDialog(null, "hello everyone!");(使用默认的Frame作为父窗口,此时对话框在屏幕正中)。

输入对话框:String input = JOptionPane.showInputDialog("hello, what is your name?");

消息显示框:JOptionPane.showMessageDialog(new JFrame(), "Hi everyone, my name is shudaye");

选择对话框(组合前三个对话框类型):Object[] options = {"OK", "CANCEL"};

int result = JOptionPane.showOptionDialog(null, "消息(message)", "标题(title)", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, option[0]);

(窗体类, message, title, optionType(通过JOptionPane.调用, 可以改变返回值), messageType(前面的message的图标显示类型), 图片, Object对象数组, 数组元素(默认选项));

2.监听鼠标:

首先实现接口MouseListener或继承抽象类MouseAdpter;
然后调用JFrame窗体(组件)的this.addMouseListener(this)方法加入监听(窗体类注册窗体对象的侦听器);
然后实现监听的5个方法:不同操作,产生不同的事件(MouseEvent),侦听器调用不同的方法,事件作为方法的参数。
(此外MouseEvent.getX可以得到鼠标的坐标)

3.在窗体中画出背景图:

首先可以在窗体类中定义BufferedImage image = null;和imagePate = "";

然后在构造函数中用imagePath保存图片路径,生成图片的对象image:

//构造函数中生成image

try {

    imagePath = System.getProperty("user.dir") + "/bin/image/background.jpg";

    image = ImageIO.read(new File(imagePath));

} catch(IOException e) {

  e.printStackTrace();

}

this.repaint();//在这里调用paint方法

于是,接下来写出public void paint(Graphics g)方法,用g.drawImage(image, 1, 30, this)在窗体上画出背景:

public void paint(Graphics g) {

  g.drawImage(image, 1, 30, this);//1和30是图片显示位置坐标

}

4.继续在窗体中画图:在paint方法中画

//双缓冲技术:先用另外一个Graphics:g2在缓冲区BufferedImage:bi中将图像画好,然后在要显示时,再将图像绘制到用于显示的Graphics:g上

//一个是用于画图片,一个是用于在窗体中显示图片

public void paint(Graphics g) {

BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
        Graphics g2 = bi.createGraphics();

    //画出背景图
        g2.drawImage(image, 1, 33, this);

    //写标题:设置绘画颜色,字体,最后写出文字
        g2.setColor(Color.BLACK);
        g2.setFont(new Font("黑体", Font.BOLD, 20));
        g2.drawString("游戏信息" + message, 130, 60);

    //写时间
        g2.setFont(new Font("宋体", 0, 14));
        g2.drawString("黑方时间:" + blackMessage, 30, 481);
        g2.drawString("白方时间" + whiteMessage, 260, 481);

    //画出棋盘:drawLine(x1, y1, x2, y2)前面坐标为起始位置,后面坐标为最终位置
        for(int i = 0; i < 19; i++) {
            g2.drawLine(11, 83 + 20 * i, 370, 83 + 20 * i);//11、370作为横向起点、终点;纵向起点、终点相同,然后一次平移
            g2.drawLine(11 + 20 * i, 83, 11 + 20 * i, 442);//纵向绘制,起始位置应当参照横向
        }

    //标注点位
        g2.fillOval(69, 141, 5, 5);//前面为坐标,后面为大小
        g2.fillOval(189, 141, 5, 5);
        g2.fillOval(309, 141, 5, 5);
        g2.fillOval(69, 261, 5, 5);
        g2.fillOval(189, 261, 5, 5);
        g2.fillOval(309, 261, 5, 5);
        g2.fillOval(69, 381, 5, 5);
        g2.fillOval(189, 381, 5, 5);
        g2.fillOval(309, 381, 5, 5);

   //绘制所有之前走过的棋子
        for(int i = 0; i < 19; i++)
            for(int j = 0; j < 19; j++) {
                if(allChess[i][j] == 1) {
                    int tempX = 20 * i + 11;
                    int tempY = 20 * i + 83;
                    g2.drawOval(tempX - 7, tempY - 7, 13, 13);
                    g2.fillOval(tempX - 7, tempY - 7, 14, 14);//黑子可先画出一个黑圈,然后用一个大一号的实心圆填充
                }
                if(allChess[i][j] == 2) {
                    int tempX = 20 * i + 11;
                    int tempY = 20 * i + 83;
                    g2.setColor(Color.WHITE);
                    g2.fillOval(tempX - 7, tempY - 7, 14, 14);
                    g2.setColor(Color.BLACK);
                    g2.drawOval(tempX - 7, tempY - 7, 14, 14);//白子则先画出一个实心圆,然后用一个小一号的黑圈圈住(总之空心圆:圈比实心圆小一号;实际情况实际分析)
                }
            }//圈住是为了使棋子看起来更光滑,黑子用黑圈,白子也用黑圈

   //将画好的图像bi显示在窗体上
        g.drawImage(bi, 0, 0, this);

  }

FiveChess笔记的更多相关文章

  1. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  7. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. CodeSmith连接不上MySql数据库的解决办法

    下载地址是http://dev.mysql.com/downloads/mirror.php?id=403020 请先注册登录后才能下载mysql-connector-net-6.3.7.msi这个文 ...

  2. Day Tips:分布式缓存的删除和重建

    遇到cacheHostInfo is null 错误时,必须将这台服务器上的实例删除重新创建 $instanceName ="SPDistributedCacheService Name=A ...

  3. [Android]ListView的Adapter.getView()方法中延迟加载图片的优化

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4139998.html 举个例子吧,以好友列表为例 ListVi ...

  4. Ubuntu 16.04 LTS 安装配置 Nginx 1.10.0 Php7.0-FPM

    1. 安装Nginx,Php-7.0 ~$ sudo add-apt-repository ppa:nginx/stable ~$ sudo apt-get update ~$ sudo apt-ge ...

  5. xmpp整理笔记:发送图片信息和声音信息

    图片和音频文件发送的基本思路就是: 先将图片转化成二进制文件,然后将二进制文件进行base64编码,编码后成字符串.在即将发送的message内添加一个子节点,节点的stringValue(节点的值) ...

  6. 复杂sql分组查询 ( pivot)

    一个数据表里面字段有年.月.日.金额.支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行, 最后在增加一列小计当前的所有支付方式的金额.如下图: 原sql ...

  7. App开发流程之使用GCD

    GCD即为Grand Central Dispatch的缩写,是一种主要用于异步处理任务的安全的高性能解决方案. 在此不对比其他异步处理技术,只记录GCD的使用及说明. 先记录一些必要的概念:线程,同 ...

  8. DevExpress ASPxSplitter ClientSideEvents-PaneExpanded 时间用法

    在webform中的devexpress aspxsplitter中套用了jquery-easyui的 tabs id=tt <div id="tt" class=" ...

  9. 配置mysql远程访问权限,大家可能掉过的那些坑~

    1 作为互联网技术从业人 或者粗暴点说:作为一个程序猿.测试从业者 如果没掉过一些坑,都不好意思说自己混过技术圈     2 今天重点讲:mysql开启远程访问权限的那些坑- 对于mysql开启远程访 ...

  10. JavaScript Patterns 5.3 Private Properties and Methods

    All object members are public in JavaScript. var myobj = { myprop : 1, getProp : function() { return ...