一.swing编程
1.一个在屏幕的正中央的窗口
package org.liky.game.test;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Test {
public static void main(String[] args) {
//创建原始窗口
JFrame jf =new JFrame();
//设置窗体是否显示
jf.setVisible(true);
//标题
jf.setTitle("FiveChess");
jf.setSize(800, 400);
//jf.setLocation(200, 100);
//窗体不可调整大小,关闭窗体时关闭应用程序
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//自动检测分辨率,并根据检测结果计算,把窗体放在正中央
//Toolkit.getDefaultToolkit().getScreenSize()静态方法,无需维护
int width =Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
System.out.println("width "+width+"|height "+height);
//窗口放在屏幕中央
jf.setLocation((width-800)/2, (height-400)/2);
}
}
2.程序的主窗体在主程序的main方法中建立显然不合适,不符合面向对象的编程思想。为此需要把主窗体包装成类,封装起来。
package org.liky.game.test;
import org.liky.game.frame.FiveChessFrame;
public class Test {
public static void main(String[] args) {
FiveChessFrame ff =new FiveChessFrame();
}
}
package org.liky.game.frame;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class FiveChessFrame extends JFrame{
//Toolkit.getDefaultToolkit().getScreenSize()静态方法,无需维护
int width =Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
public FiveChessFrame() {
// TODO Auto-generated constructor stub
//创建原始窗口
//设置窗体是否显示
this.setVisible(true);
//标题
this.setTitle("FiveChess");
this.setSize(800, 400);
//jf.setLocation(200, 100);
//窗体不可调整大小,关闭窗体时关闭应用程序
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//窗口放在屏幕中央
this.setLocation((width-800)/2, (height-400)/2);
}
}
二.JOptionPane消息框
利用JOptionPane类中的各个静态方法来生成各种标准的对话框,实现显示出信息、提出问题、警告和用户输入参数等功能。这些对话框都是模式对话框。
测试JOptionPane
package org.liky.game.test;
import javax.swing.JOptionPane;
import org.liky.game.frame.FiveChessFrame;
public class Test {
public static void main(String[] args) {
FiveChessFrame ff =new FiveChessFrame();
JOptionPane.showMessageDialog(ff, "游戏开始");
int result = JOptionPane.showConfirmDialog(ff, "现在开始游戏?");
if (result ==0) {
JOptionPane.showMessageDialog(ff, "游戏开始");
}
if (result ==1) {
JOptionPane.showMessageDialog(ff, "游戏结束");
}
if (result ==2) {
JOptionPane.showMessageDialog(ff, "请重新选择");
}
String username = JOptionPane.showInputDialog("请输入你的姓名: ");
if(username !=null) {
System.out.println(username);
JOptionPane.showMessageDialog(ff, "输入的姓名为: "+username);
}else {
JOptionPane.showMessageDialog(ff, "请重新输入你的姓名");
}
}
}
三.MouseListener监听鼠标
mousePressed>mouseReleased>mouseClicked (判断按下与抬起是否在同一位置)
测试MouseListener
package org.liky.game.frame;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class FiveChessFrame extends JFrame implements MouseListener{
//Toolkit.getDefaultToolkit().getScreenSize()静态方法,无需维护
int width =Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
//棋子坐标
int x=0,y=0;
//保存棋子坐标(0无棋子,1黑子,2白子)
int[][] allChess =new int[19][19];
//标识下一步是白是黑
boolean isBlack = true;
//标识游戏是否可以继续
boolean canPlay = true;
//保存显示的提示信息
String message = "黑方先行";
//保存最多拥有多少时间( 秒)
int maxTime = 0;
//保存双方剩余时间
int blackTime=0,whiteTime=0;
//保存双方剩余时间的显示信息
String blackMessage = "无限制",whiteMessage = "无限制";
public FiveChessFrame() {
// TODO Auto-generated constructor stub
//设置窗体是否显示
this.setVisible(true);
//标题
this.setTitle("FiveChess");
this.setSize(800, 400);
//jf.setLocation(200, 100);
//窗体不可调整大小,关闭窗体时关闭应用程序
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//窗口放在屏幕中央
this.setLocation((width-800)/2, (height-400)/2);
//加入监听器
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(this, "鼠标单击");
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
四.MouseEvent 确定鼠标坐标
MouseEvent arg0这个参数可以得到鼠标的坐标。
arg0.getX()可以得到鼠标的横坐标。
arg0.getY()可以得到鼠标的纵坐标。
五.ImagelO显示图片的类
lmagelO类包含一些用来查找ImageReader 和ImageWriter 以及执行简单编码和解码的静态便捷方法。将硬盘中的图片导入到窗口中:通过ImageIO输入一个Bufferedlmage。
drawlmage()方法:将一个Bufferedlmage 对象绘制到窗口中。
setColor():设置颜色。
setFont():设置字体。
六.Graphics图形的绘制类
图形环境的概念同在GUI平台上开发应用程序紧密相关。虽然通常将窗口和组件本身作为对象来表达,但仍然需要另一个接口来进行实际的绘制、着色以及文本输出等操作。
Java 语言中提供这些功能的基类称做java.awt.Graphics。从java.awt.Component类(所有窗口对象的基类)继承的类提供了一个名为paint() 的方法,在需要重新绘制组件时,调用该方法。
paint()方法只有一个参数,该参数是Graphics 类的实例。
drawString():绘制字符串。
drawOval():绘制一个空心的圆形。
fillOval():绘制一个实心的圆形。
drawLine():绘制一条线。
drawRect():绘制一个空心的矩形。
fillRect():绘制一个实心的矩形。
drawlmage():绘制一个已经存在的图片,将一个图片直接显示到窗体中。
setColor():设置画笔的颜色。
setFont():设置绘制文字的字体。