Java基础系列——基于spring的五子棋实战(1)界面框架

界面框架

  • 主体
  • 下棋区域
  • 按钮区域

这篇文章主要阐述设计界面框架的思路,整体思路为先设计主体,框架总共包含两部分,一部分为下棋区域,完成下棋的各种操作;一部分为按钮区域,有开始棋局、录制、回放、人机对战等功能。

主体

建立一个JFrame对象来构建主体,根据兴趣设置了点属性。将下棋区域和按钮区域的对象为GoBangPanel和BtnPanel,随后加入jf中,便简单完成了。代码如下:

import javax.swing.*;
import java.awt.*;

public class GoBangUI{

    GoListener gol = new GoListener ();
    public void initUI(){
        JFrame jf = new JFrame ("五子棋-AI");
        jf.setSize (750,650);
        jf.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE);
        jf.setLocationRelativeTo(null);// 居中显示
        jf.setResizable(false);//不能最大化
        jf.setVisible (true);
        // 边框布局: JFrame 默认布局
        // 流式布局: JPanel 默认布局
        GoBangPanel goPanel = new GoBangPanel (gol);// 中央 去除其他方位剩下的区域
        BtnPanel btnPanel = new BtnPanel (gol);//

        jf.add(goPanel);
        jf.add (btnPanel,BorderLayout.EAST);

        jf.setVisible (true);

        // 从面板对象上获取Graphics 传给 gol 中的属性
        Graphics g = goPanel.getGraphics ();
        // 在哪个上绘制内容,就必须从哪个组件上获取Graphics
        gol.setGraphics (g);
        gol.setGoPanel(goPanel);

    }
    public static void main(String[] args){
        new GoBangUI ().initUI ();
    }
}

下棋区域

下棋区域主要需要实现绘制棋盘和棋子的功能,这里我是设了一个方法paint(Graphics g)。方法g.drawLine、g.setColor、g.fillOval等可以完美实现绘图需求。chessArray为用于存储的棋局的二维数组(下篇文章会介绍它的设置),这里使用chessArray和g.fillOval功能可以完美实现棋子的绘制。

import javax.swing.*;
import java.awt.*;

class GoBangPanel extends JPanel implements DataConfig{
    private GoListener gol;
    public  GoBangPanel(GoListener gol){
        this.gol=gol;
        setBackground (new Color (227, 229, 159));
        this.addMouseListener (gol);
    }
    // paint 初始绘制 显示组件
    // Graphics 图形 绘制图形的方法
    // GPU 显卡 图形处理器
    // 改变窗体的时候刷新
    @Override
    public void paint(Graphics g){
        super.paint (g);
        // 绘制网格线
        for (int i = 0; i <=ROW;i++) {
            g.drawLine (LEFT_X,LEFT_Y+i*SIZE,LEFT_X+ROW*SIZE,LEFT_Y+i*SIZE);
            g.drawLine (LEFT_X+i*SIZE,LEFT_Y,LEFT_X+i*SIZE,LEFT_Y+ROW*SIZE);
        }
        int[][] chessArray=gol.getChessArray();
        // 遍历 数组 将其中存储的棋子 绘制出来
        for (int i = 0; i < chessArray.length; i++) {
            for (int j = 0; j < chessArray[i].length; j++) {
                int chessNum = chessArray[i][j];
                if(chessNum != 0){
                    g.setColor ((chessNum==1)? Color.BLACK:Color.WHITE);
                    // 根据行列值 还原标准坐标
                    int cx = j * SIZE + LEFT_X - SIZE / 2;
                    int cy = i * SIZE + LEFT_Y - SIZE / 2;
                    g.fillOval (cx, cy, 35, 35);
                }
            }
        }
    }
}

按钮区域

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;

class BtnPanel extends  JPanel{

    public BtnPanel(ActionListener al){
        setBackground (Color.GRAY);
        setPreferredSize(new Dimension(110,0));
        init (al);
    }

    public void init(ActionListener al){
        String[] btnStr = {"开始对局","悔棋","录制","回放","人机对战"};
        Dimension dim =   new Dimension (105,35);
        for (int i = 0; i < btnStr.length; i++) {
            JButton btn = new JButton (btnStr[i]);
            btn.setBackground (Color.WHITE);
            btn.setPreferredSize (dim);
            this.add (btn);
            btn.addActionListener (al);
        }
    }
}

效果:
Java基础系列——基于spring的五子棋实战(1)界面框架_第1张图片

你可能感兴趣的:(java基础,java,开发语言,1024程序员节)