核心提示:a.jpgConfig.xml ~ 122B ?xml version='1.0' encoding='UTF-8'?CONFIGSIZE50/SIZEROW8/ROWCLOUNM8/CLOUNM/C...
a.jpg - <?xml version="1.0" encoding="UTF-8"?>
- <CONFIG>
- <SIZE>50</SIZE>
- <ROW>8</ROW>
- <CLOUNM>8</CLOUNM>
- </CONFIG>
- import panel.MainUI;
- public class Main {
- public static void main(String[] args) {
- new MainUI();
- }
- }
- package panel;
- import java.awt.Color;
- import java.io.File;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import org.w3c.dom.Document;
- import org.w3c.dom.NodeList;
- public class Config {
- private static int port;
- /**
- * ?à×ó±??ò?àà?
- */
- public static final int STARTX = 50;
- /**
- * ?Yé?±??ò?àà?
- */
- public static final int STARTY = 90;
- /**
- * ????
- */
- public static int SIZE = 50;
- /**
- * DDêy
- */
- public static int ROW = 10;
- /**
- * áDêy
- */
- public static int CLOUNM = 10;
- private static Color color = Color.BLACK;
- private static byte[][] chess ;
- private static int[] notify = { -1, -1 };
- static {
- try {
- File f = new File("Config.xml");
- DocumentBuilderFactory factory = DocumentBuilderFactory
- .newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document doc = builder.parse(f);
- NodeList nl = doc.getElementsByTagName("CONFIG");
- // SIZE=Integer.parseInt(doc.getElementsByTagName("SIZE").item(0).getFirstChild().getNodeValue()));
- for (int i = 0; i < nl.getLength(); i++) {
- SIZE = Integer.parseInt(doc.getElementsByTagName("SIZE")
- .item(i).getFirstChild().getNodeValue());
- ROW = Integer.parseInt(doc.getElementsByTagName("ROW").item(i)
- .getFirstChild().getNodeValue());
- CLOUNM = Integer.parseInt(doc.getElementsByTagName("CLOUNM")
- .item(i).getFirstChild().getNodeValue());
- // System.out.println(SIZE+" "+ROW+ " "+CLOUNM);
- }
- chess = new byte[ROW + 1][CLOUNM + 1];
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static void setX(int x) {
- notify[0] = x;
- }
- public static int getX() {
- return notify[0];
- }
- public static void setY(int y) {
- notify[1] = y;
- }
- public static int getY() {
- return notify[1];
- }
- public static void clearNotify() {
- notify[0] = notify[1] = -1;
- }
- /**
- * éè????×ó??é?
- */
- public static void setColor(Color cr) {
- color = cr;
- }
- public static void exchangeColor(){
- color=(color==Color.BLACK)?Color.WHITE:Color.BLACK;
- }
- /**
- * ??μ???×ó??é?
- */
- public static Color getColor() {
- return color;
- }
- /**
- * ?D??êó±ê?ùμ??÷????ê?·??é????×ó
- */
- public static boolean isChessMan(int x, int y, Color color) {
- int j = (x - STARTX) / SIZE;
- int i = (y - STARTY) / SIZE;
- if (chess[i][j] != 0)
- return false;
- else {
- chess[i][j] = (color == Color.BLACK) ? (byte) 1 : -1;
- return true;
- }
- }
- /**
- * ?D??êó±ê?ùμ??÷×?±êê?·??é????×ó
- */
- public static boolean isChessMan(byte j, byte i, Color color) {
- if (chess[i][j] != 0)
- return false;
- else {
- chess[i][j] = (color == Color.BLACK) ? (byte) 1 : -1;
- return true;
- }
- }
- /**
- * ???????ì
- */
- public static void resetChess(byte[][] buf) {
- chess = buf;
- }
- /**
- * ?D??ê?·?ê¤à?
- */
- public static boolean isWin(Color color) {
- boolean flag = false;
- int n = 0;
- int c = (color == Color.BLACK) ? 1 : -1;
- // ?D??áD
- for (int i = 0; i <= ROW; i++) {
- for (int j = 0; j <= CLOUNM; j++) {
- if (chess[i][j] == c && flag == false) {
- n = 1;
- flag = true;
- } else if (chess[i][j] == c && flag == true) {
- n++;
- } else if (chess[i][j] != c) {
- n = 0;
- flag = false;
- }
- if (5 == n) {
- n = 0;
- flag = false;
- return true;
- }
- }
- }
- n = 0;
- flag = false;
- // ?D??DD
- for (int j = 0; j <= CLOUNM; j++) {
- for (int i = 0; i <= ROW; i++) {
- if (chess[i][j] == c && flag == false) {
- n = 1;
- flag = true;
- } else if (chess[i][j] == c && flag == true) {
- n++;
- } else if (chess[i][j] != c) {
- n = 0;
- flag = false;
- }
- if (5 == n) {
- n = 0;
- flag = false;
- return true;
- }
- }
- }
- n = 0;
- flag = false;
- // ?D??×óD±
- for (int i = 0; i <= ROW; i++) {
- for (int j = 0; j <= CLOUNM; j++) {
- for (int ii = i, jj = j; ii <= ROW && jj >= 0; ii++, jj--) {
- if (chess[ii][jj] == c && flag == false) {
- n = 1;
- flag = true;
- } else if (chess[ii][jj] == c && flag == true) {
- n++;
- } else if (chess[ii][jj] != c) {
- n = 0;
- flag = false;
- }
- if (5 == n) {
- n = 0;
- flag = false;
- return true;
- }
- }
- }
- }
- n = 0;
- flag = false;
- // ?D??óòD±
- for (int i = 0; i <= ROW; i++) {
- for (int j = 0; j <= CLOUNM; j++) {
- for (int ii = i, jj = j; jj <= CLOUNM && ii <= ROW; ii++, jj++) {
- if (chess[ii][jj] == c && flag == false) {
- n = 1;
- flag = true;
- } else if (chess[ii][jj] == c && flag == true) {
- n++;
- } else if (chess[ii][jj] != c) {
- n = 0;
- flag = false;
- }
- if (5 == n) {
- n = 0;
- flag = false;
- return true;
- }
- }
- }
- }
- return false;
- }
- /**
- * éè?????úo?
- */
- public static void setPort(int p) {
- port = p;
- // System.out.println(port);
- }
- /**
- * ??è????úo?
- */
- public static int getPort() {
- return port;
- }
- /**
- * ??????×ó
- */
- public static void clearChess() {
- chess = new byte[ROW + 1][CLOUNM + 1];
- }
- /**
- * ??μ???×ó
- */
- public static byte[][] getChess() {
- return chess;
- }
- }
- package panel;
- import game.ChessUtils;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Graphics;
- import javax.swing.ImageIcon;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JMenu;
- import javax.swing.JMenuBar;
- import javax.swing.JMenuItem;
- import javax.swing.JPanel;
- @SuppressWarnings("serial")
- public class MainUI extends JFrame {
- private MenuListener menupolice;
- private JMenuBar menubar;
- private JMenu menu;
- private JMenuItem itemStart;
- private JMenuItem itemjoin;
- private JMenuItem itemOver;
- public MainUI() {
- setSize(2 * Config.STARTX + Config.CLOUNM * Config.SIZE, Config.STARTY
- + Config.SIZE * (Config.ROW + 1));
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setLayout(new BorderLayout());
- itemStart = new JMenuItem("创建游戏");
- itemjoin = new JMenuItem("加入游戏");
- itemOver = new JMenuItem("结束游戏");
- menu = new JMenu("菜单");
- menubar = new JMenuBar();
- menu.add(itemStart);
- menu.add(itemjoin);
- menu.add(itemOver);
- menubar.add(menu);
- add(menubar, BorderLayout.NORTH);
- menupolice = new MenuListener(itemStart, itemjoin, itemOver, this);
- itemStart.addActionListener(menupolice);
- itemjoin.addActionListener(menupolice);
- itemOver.addActionListener(menupolice);
- // 添加窗体背景图片
- ImageIcon icon = new ImageIcon("1.jpg");
- JLabel label = new JLabel(icon);
- getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
- label.setBounds(0, 0, 1000,1000);
- ((JPanel) this.getContentPane()).setOpaque(false);
- ChessUtils.locateFrameCenter(this);
- setVisible(true);
- setTitle("五子棋");
- }
- /**
- * 重写父类重绘方法
- */
- public void paint(Graphics g) {
- // 调用父类重绘方法
- super.paint(g);
- drawLine(g);
- drawChessMan(g);
- }
- /**
- * 重绘棋盘
- */
- private void drawLine(Graphics g) {
- g.setColor(Color.BLACK);
- // 纵线
- for (int i = 0; i <= Config.CLOUNM; i++) {
- g.drawLine(Config.SIZE * i + Config.STARTX, Config.STARTY,
- Config.SIZE * i + Config.STARTX, (Config.ROW) * Config.SIZE
- + Config.STARTY);
- }
- // 横线
- for (int i = 0; i <= Config.ROW; i++) {
- g.drawLine(Config.STARTX, Config.STARTY + Config.SIZE * i,
- Config.SIZE * (Config.CLOUNM) + Config.STARTX,
- Config.STARTY + Config.SIZE * i);
- }
- }
- /**
- * 重绘棋子
- */
- private void drawChessMan(Graphics g) {
- g.setColor(Config.getColor());
- byte[][] chess = Config.getChess();
- // System.out.println(Config.ROW);
- for (int i = 0; i <= Config.ROW; i++) {
- for (int j = 0; j <= Config.CLOUNM; j++) {
- if (1 == chess[i][j]) {
- g.setColor(Color.BLACK);
- g.fillOval((j * Config.SIZE + Config.STARTX)
- - (Config.SIZE / 2),
- (i * Config.SIZE + Config.STARTY)
- - (Config.SIZE / 2), Config.SIZE - 5,
- Config.SIZE - 5);
- }
- if (-1 == chess[i][j]) {
- g.setColor(Color.WHITE);
- g.fillOval((j * Config.SIZE + Config.STARTX)
- - (Config.SIZE / 2),
- (i * Config.SIZE + Config.STARTY)
- - (Config.SIZE / 2), Config.SIZE - 5,
- Config.SIZE - 5);
- }
- }
- }
- // g.setColor(Color.BLACK);
- }
- }
- package panel;
- import game.GameClient;
- import game.GameServer;
- import game.MyDialog;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import javax.swing.JFrame;
- import javax.swing.JMenuItem;
- /**
- * 处理输赢判断以及坐标转换
- *
- * @author chenj_000
- *
- */
- public class MyListener implements MouseListener {
- /**
- * 鼠标点击触发
- */
- public void mousePressed(MouseEvent e) {
- // 1,获得焦点坐标
- int x = e.getX();
- int y = e.getY();
- x = ((x - Config.STARTX) + (Config.SIZE / 2)) / Config.SIZE
- * Config.SIZE + Config.STARTX;
- y = ((y - Config.STARTY) + (Config.SIZE / 2)) / Config.SIZE
- * Config.SIZE + Config.STARTY;
- // 2,判断坐标是否闲置
- if (!Config.isChessMan(x, y, Config.getColor()))
- return;
- // 3,若坐标可用,则向配置文件发送坐标信息
- Config.setX(x);
- Config.setY(y);
- }
- public void mouseClicked(MouseEvent e) {
- }
- public void mouseReleased(MouseEvent e) {
- }
- public void mouseEntered(MouseEvent e) {
- }
- public void mouseExited(MouseEvent e) {
- }
- }
- /**
- * 菜单项监视器
- *
- * @author chenj_000
- *
- */
- class MenuListener implements ActionListener {
- private JMenuItem itemStart;
- private JMenuItem itemjoin;
- private JMenuItem itemOver;
- private JFrame frame;
- private Thread start;
- private Thread join;
- private GameServer server;
- private GameClient client;
- public MenuListener(JMenuItem Start, JMenuItem join, JMenuItem Over,
- JFrame f) {
- itemStart = Start;
- itemjoin = join;
- itemOver = Over;
- frame = f;
- }
- @Override
- public void actionPerformed(ActionEvent e) {
- JMenuItem item = (JMenuItem) e.getSource();
- if (item.equals(itemStart)) {
- server=new GameServer(frame);
- start = new Thread(server);
- start.start();
- itemStart.setEnabled(false);
- itemjoin.setEnabled(false);
- } else if (item.equals(itemjoin)) {
- client=new GameClient(frame);
- join = new Thread(client);
- join.start();
- itemStart.setEnabled(false);
- itemjoin.setEnabled(false);
- } else if (item.equals(itemOver)) {
- if (null != start)
- try {
- server.threadDestory();
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- if (null != join)
- try {
- client.threadDestory();
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- itemStart.setEnabled(true);
- itemjoin.setEnabled(true);
- Config.clearChess();
- new MyDialog(frame, "棋局已经重置", false).setVisible(true);
- }
- }
- }
- package game;
- import java.awt.*;
- import javax.swing.*;
- /**
- * 本类为其他类提供可静态引用的方法
- *
- * @author chenj_000
- *
- */
- public class ChessUtils {
- /**
- * 将一个容器的位置设置为居中
- */
- public static void locateFrameCenter(JFrame frame) {
- int frameWidth = frame.getWidth();
- int frameHeight = frame.getHeight();
- /* Toolkit是所有 Abstract Window Toolkit 实际实现的抽象超类。 getDefaultToolkit()获取默认工具包。*/
- Toolkit toolkit = Toolkit.getDefaultToolkit();
- /* Dimension 类封装单个对象中组件的宽度和高度(精确到整数)。 getScreenSize() 获取当前显示器尺寸 */
- Dimension screen = toolkit.getScreenSize();
- int screenWidth = screen.width;
- int screenHeight = screen.height;
- /* 调整当前容器位置居中 */
- frame.setLocation((screenWidth - frameWidth) / 2,
- (screenHeight - frameHeight) / 2);
- }
- /**
- * 设置对话框居中显示
- */
- public static void locateDialogCenter(JDialog dialog) {
- int frameWidth = dialog.getWidth();
- int frameHeight = dialog.getHeight();
- Toolkit toolkit = Toolkit.getDefaultToolkit();
- Dimension screen = toolkit.getScreenSize();
- int screenWidth = screen.width;
- int screenHeight = screen.height;
- dialog.setLocation((screenWidth - frameWidth) / 2,
- (screenHeight - frameHeight) / 2);
- }
- }
- package game;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.InetAddress;
- import java.net.Socket;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import panel.Config;
- import panel.MyListener;
- public class GameClient implements Runnable {
- private Socket client;
- private int port;
- private String ip;
- private JFrame frame;
- private InputStream in;
- private OutputStream out;
- private String name;
- private boolean flag = false;
- public GameClient(JFrame frame) {
- this.frame = frame;
- init();
- }
- /**
- * 判断是否建立了连接
- */
- private boolean confirm() throws IOException {
- byte[] buf = new byte[64];
- int n = in.read(buf);
- name = new String(buf, 0, n);
- return (name.length() > 0) ? true : false;
- }
- /**
- * 接收初始化信息
- *
- * @throws IOException
- */
- private void resetUI() throws IOException {
- byte buf[] = new byte[64];
- int n = in.read(buf);
- // System.out.println(s);
- String[] numberStrs = new String(buf, 0, n).split("#");
- // System.out.println(numberStrs.toString());
- Config.SIZE = Integer.parseInt(numberStrs[0]);
- Config.ROW = Integer.parseInt(numberStrs[1]);
- Config.CLOUNM = Integer.parseInt(numberStrs[2]);
- frame.setSize(2 * Config.STARTX + Config.CLOUNM * Config.SIZE,
- Config.STARTY + Config.SIZE * (Config.ROW + 1));
- Config.resetChess(new byte[Config.ROW + 1][Config.CLOUNM + 1]);
- frame.paint(frame.getGraphics());
- }
- public void run() {
- try {
- InetAddress address = InetAddress.getByName(ip);
- client = new Socket(address, port);
- in = client.getInputStream();
- out = client.getOutputStream();
- if (!confirm()) {
- new MyDialog(frame, "连接服务器失败", true).setVisible(true);
- return;
- }
- resetUI();
- frame.setTitle("五子棋 " + "已连接:" + name + " 的游戏:本机端口号:"
- + client.getLocalPort());
- // 1,设置棋子颜色
- Config.setColor(Color.WHITE);
- // 2,交替下棋
- MyListener police = new MyListener();
- while (true) {
- if (flag) {
- frame.addMouseListener(police);
- while (Config.getX() == -1) {
- Thread.sleep(20);
- }
- int x = Config.getX();
- int y = Config.getY();
- Config.clearNotify();
- Graphics g = frame.getGraphics();
- g.setColor(Config.getColor());
- g.fillOval(x - (Config.SIZE / 2), y - (Config.SIZE / 2),
- Config.SIZE - 5, Config.SIZE - 5);
- // 将位置转换为坐标并发送给服务器端
- x = (x - Config.STARTX) / Config.SIZE;
- y = (y - Config.STARTY) / Config.SIZE;
- byte buf[] = new byte[2];
- buf[0] = (byte) x;
- buf[1] = (byte) y;
- out.write(buf);
- if (Config.isWin(Color.BLACK)) {
- new MyDialog(frame, Color.BLACK).setVisible(true);
- } else if (Config.isWin(Color.WHITE)) {
- new MyDialog(frame, Color.WHITE).setVisible(true);
- }
- flag = !flag;
- frame.removeMouseListener(police);
- } else {
- byte[][] buf = new byte[Config.ROW + 1][Config.CLOUNM + 1];
- for (int i = 0; i <= Config.ROW; i++) {
- in.read(buf[i]);
- }
- Config.resetChess(buf);
- frame.paint(frame.getGraphics());
- if (Config.isWin(Color.BLACK)) {
- new MyDialog(frame, Color.BLACK).setVisible(true);
- } else if (Config.isWin(Color.WHITE)) {
- new MyDialog(frame, Color.WHITE).setVisible(true);
- }
- flag = true;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- new MyDialog(frame, "连接服务器失败", true).setVisible(true);
- return;
- }
- }
- public void threadDestory() throws Exception{
- in.close();
- out.close();
- client.close();
- }
- private void init() {
- String[][] initValue = new String[][] { { "IP地址:", "127.0.0.1" },
- { "端口:", "7777" } };
- // 创建创建账号的对话框
- MyDialog initDialog = new MyDialog(frame, "请输入对方地址", true, initValue);
- initDialog.setVisible(true);
- // 获得输入数据
- String[] nameAndPort = initDialog.getValue();
- if (nameAndPort == null) {
- return;
- }
- this.ip = nameAndPort[0];
- try {
- this.port = Integer.valueOf(nameAndPort[1]);
- // 判断端口号是否正确
- if (port <= 0 || port > 65536) {
- String errMsg = "错误的端口号" + nameAndPort[1] + "。端口号必须在0和65536之间";
- JOptionPane.showMessageDialog(frame, errMsg, "错误的端口号",
- JOptionPane.ERROR_MESSAGE);
- return;
- }
- } catch (NumberFormatException ex) {
- JOptionPane.showMessageDialog(frame, "输入的端口号不是数字。", "错误的端口号",
- JOptionPane.ERROR_MESSAGE);
- return;
- }
- Config.setPort(port);
- Config.clearChess();
- frame.paint(frame.getGraphics());
- }
- }
- package game;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- import panel.Config;
- import panel.MyListener;
- public class GameServer implements Runnable {
- private ServerSocket server;
- private Socket client;
- private JFrame frame;
- private int port;
- private String name;
- private InputStream in;
- private OutputStream out;
- private boolean flag = true;
- public GameServer(JFrame frame) {
- this.frame = frame;
- }
- public void threadDestory() throws Exception{
- in.close();
- out.close();
- client.close();
- server.close();
- }
- /**
- * 确认连接
- */
- private void confirm() throws IOException {
- out.write(name.getBytes());
- }
- private void sendUI() throws IOException{
- String s=new String(Config.SIZE+"#"+Config.ROW+"#"+Config.CLOUNM);
- out.write(s.getBytes());
- }
- public void run() {
- init();
- try {
- server = new ServerSocket(Config.getPort());
- client = server.accept();
- in = client.getInputStream();
- out = client.getOutputStream();
- confirm();
- sendUI();
- // 设置棋子颜色
- Config.setColor(Color.BLACK);
- // 交替下棋
- MyListener police = new MyListener();
- Graphics g = frame.getGraphics();
- while (true) {
- if (flag) {
- frame.addMouseListener(police);
- while (Config.getX() == -1) {
- Thread.sleep(20);
- }
- int x = Config.getX();
- int y = Config.getY();
- Config.clearNotify();
- g.setColor(Config.getColor());
- g.fillOval(x - (Config.SIZE / 2), y - (Config.SIZE / 2),
- Config.SIZE - 5, Config.SIZE - 5);
- // 发送棋盘给客户端
- byte[][] chess = Config.getChess();
- for (int i = 0; i <= Config.ROW; i++) {
- out.write(chess[i]);
- }
- if (Config.isWin(Color.BLACK)) {
- new MyDialog(frame, Color.BLACK).setVisible(true);
- } else if (Config.isWin(Color.WHITE)) {
- new MyDialog(frame, Color.WHITE).setVisible(true);
- }
- flag = !flag;
- frame.removeMouseListener(police);
- } else {
- byte[] buf = new byte[2];
- in.read(buf);
- Config.isChessMan(buf[0], buf[1],
- (Config.getColor() == Color.BLACK) ? Color.WHITE
- : Color.BLACK);
- frame.paint(g);
- if (Config.isWin(Color.BLACK)) {
- new MyDialog(frame, Color.BLACK).setVisible(true);
- } else if (Config.isWin(Color.WHITE)) {
- new MyDialog(frame, Color.WHITE).setVisible(true);
- }
- flag = true;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- new MyDialog(frame, "客户端已下线", true).setVisible(true);
- return;
- }
- }
- private void init() {
- String[][] initValue = new String[][] { { "用户名:", "CJN" },
- { "端口:", "7777" } };
- MyDialog initDialog = new MyDialog(frame, "请输入用户名和端口", true, initValue);
- initDialog.setVisible(true);
- String[] nameAndPort = initDialog.getValue();
- if (nameAndPort == null) {
- return;
- }
- this.name = nameAndPort[0];
- try {
- this.port = Integer.valueOf(nameAndPort[1]);
- // 判断端口号是否正确
- if (port <= 0 || port > 65536) {
- String errMsg = "错误的端口号" + nameAndPort[1] + "。端口号必须在0和65536之间";
- JOptionPane.showMessageDialog(frame, errMsg, "错误的端口号",
- JOptionPane.ERROR_MESSAGE);
- return;
- }
- } catch (NumberFormatException ex) {
- JOptionPane.showMessageDialog(frame, "输入的端口号不是数字。", "错误的端口号",
- JOptionPane.ERROR_MESSAGE);
- return;
- }
- Config.setPort(port);
- frame.setTitle("五子棋 " + "玩家: " + name + " 端口号:" + port);
- Config.clearChess();
- frame.paint(frame.getGraphics());
- }
- }
- package game;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import panel.Config;
- /**
- * 本类用于添加建立相应的对话框
- *
- * @author chenj_000
- *
- */
- @SuppressWarnings("serial")
- public class MyDialog extends JDialog implements ActionListener {
- static final int YES = 1, NO = 0;
- int message = -1;
- JButton yes, no;
- JFrame frame;
- private String context;
- /**
- * 需要添加进文本框的字符串数组初值
- */
- private String[][] items;
- /**
- * 根据传入的字符串数组创建的文本框对象
- */
- private JTextField[] values;
- /**
- * 需要返回的文本框中的数据
- */
- private String[] retValues;
- /**
- * 该构造方法用以创建一个具有指定标题、所有者 Frame 和模式的对话框
- */
- public MyDialog(Frame owner, String title, boolean modal, String[][] items) {
- super(owner, title, modal);
- this.items = items;
- init();
- }
- /**
- * 设置提醒对话框
- */
- public MyDialog(JFrame j, String context, boolean flag) {
- super(j, "提醒", flag);
- frame = j;
- this.context = context;
- warn();
- }
- /**
- * 设置胜利对话框
- */
- public MyDialog(JFrame j, Color color) {
- super(j, "提示", true);
- frame = j;
- // Config.resetColor();
- win(color);
- }
- private void warn() {
- yes = new JButton("确定");
- no = new JButton("取消");
- yes.addActionListener(this);
- no.addActionListener(this);
- JPanel p1 = new JPanel();
- p1.add(new JLabel(context));
- JPanel p2 = new JPanel();
- p2.add(yes);
- p2.add(no);
- add(p1, BorderLayout.NORTH);
- add(p2, BorderLayout.CENTER);
- int x = (int) (frame.getBounds().x + 0.25 * frame.getBounds().width);
- int y = (int) (frame.getBounds().y + 0.25 * frame.getBounds().height);
- setBounds(x, y, 200, 110);
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- message = -1;
- setVisible(false);
- }
- });
- }
- private void win(Color color) {
- yes = new JButton("确定");
- yes.addActionListener(this);
- JPanel p1 = new JPanel();
- String str = (Color.BLACK == color) ? "黑方胜利" : "白方胜利";
- p1.add(new JLabel(str));
- JPanel p2 = new JPanel();
- p2.add(yes);
- add(p1, BorderLayout.NORTH);
- add(p2, BorderLayout.CENTER);
- int x = (int) (frame.getBounds().x + 0.25 * frame.getBounds().width);
- int y = (int) (frame.getBounds().y + 0.25 * frame.getBounds().height);
- setBounds(x, y, 200, 110);
- Config.clearChess();
- Config.exchangeColor();
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- message = -1;
- setVisible(false);
- }
- });
- }
- @Override
- public void actionPerformed(ActionEvent e) {
- if (e.getSource() == yes) {
- message = YES;
- frame.paint(frame.getGraphics());
- setVisible(false);
- } else if (e.getSource() == no) {
- message = NO;
- frame.paint(frame.getGraphics());
- setVisible(false);
- }
- }
- /**
- * 初始化对话框布局
- */
- private void init() {
- Container container = this.getContentPane();
- container.setLayout(new GridBagLayout());
- GridBagConstraints gbc = new GridBagConstraints();
- int count = items.length;
- gbc.gridx = 0;
- gbc.gridwidth = 1;
- gbc.gridheight = 1;
- gbc.fill = GridBagConstraints.NONE;
- gbc.insets = new Insets(3, 3, 3, 3);
- for (int i = 0; i < count; i++) {
- gbc.gridy = i;
- container.add(new JLabel(items[i][0]), gbc);
- }
- values = new JTextField[count];
- gbc.gridx = 1;
- gbc.gridwidth = 1;
- gbc.gridheight = 1;
- gbc.weightx = 1.0;
- gbc.weighty = 0;
- gbc.fill = GridBagConstraints.HORIZONTAL;
- for (int i = 0; i < count; i++) {
- gbc.gridy = i;
- values[i] = new JTextField(items[i][1]);
- container.add(values[i], gbc);
- }
- gbc.gridx = 0;
- gbc.gridy = count;
- gbc.gridwidth = 2;
- gbc.gridheight = 1;
- gbc.weightx = 1.0;
- gbc.weighty = 1.0;
- gbc.fill = GridBagConstraints.HORIZONTAL;
- gbc.anchor = GridBagConstraints.SOUTH;
- container.add(new JSeparator(), gbc);
- gbc.gridy = count + 1;
- gbc.weightx = 1.0;
- gbc.weighty = 0;
- gbc.fill = GridBagConstraints.NONE;
- gbc.anchor = GridBagConstraints.SOUTHEAST;
- gbc.insets = new Insets(7, 7, 7, 7);
- JButton btn = new JButton("确定");
- container.add(btn, gbc);
- btn.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- retValues = new String[items.length];
- for (int i = 0; i < retValues.length; i++) {
- retValues[i] = values[i].getText();
- }
- // 释放所有子组件所使用的所有本机屏幕资源
- MyDialog.this.dispose();
- }
- });
- this.setSize(300, count * 30 + 70);
- ChessUtils.locateDialogCenter(this);
- }
- /**
- * 获取对话框中的所有数据
- */
- public String[] getValue() {
- return retValues;
- }
- }
Java免费学习 Java自学网 http://www.javalearns.com
关注微信号:javalearns 随时随地学Java
或扫一扫
随时随地学Java