(一)界面的内容
基于事件监听机制,一个界面包括容器,内容,组件,规则方式,包等,其中容器是可以加载其它组件的窗体,内容包括有文本和图片,组件有按钮,菜单和输入框,规则方式则包括尺寸,大小,布局。
而包则有很多种,其中较为常用的有java.awt(早期界面开发包)和javax.swing(升级界面开发包),其中java.awt组件样式(frame,button)老旧,不推荐使用,但可以保留使用元素规则类,如尺寸(Dimension),颜色(color)以及布局。而javax.swing是升级版的可以使用其可视化的组件和容器,窗体类(frame)和按钮(button),输入框,菜单.
java.awt中要用到的类:java.awt.Dimension,java.awt.color,java.awt.FlowLayout
java.swing中要用到的类:java.swing.JFrame,java.swing.JButton,java.swing.JLabel等
(二)界面的开发步骤
一个界面的开发有以下步骤:
1:创建一个窗体对象
java.swing.JFrame jf=new java.swing.JFrame();
2:设置窗体对象及属性
java.awt.Color color=new java.awt.Colord(200,0,0); //设置颜色
jf.setTitle("登录界面"); //设置登录标题
jf.setSzie(500,800); //设置大小
jf.awt.FlowLayout flow=new java.awt.FlowLayout(); //创建流式布局器的对象
jf.setLayout(flow);
jf.setDafaultcloseOperation(java.swing.JFrame.EXIT_ON_CLOSE) //关闭方式
jf.setVisible(true) //可视化
3:创建组件对象数组
String []btnstrs={"直线","矩形","圆","实心圆"};
Color[]colors={Color.BLACK,Color.RED,Color.WHITE,Color.GRAY,Color.BLUE,color.GREEN};
//创建数组
Dimension dim=new Dimension(60,60);
for(int i=0;i<btnStrs.length;i++)
{
JButton btn=new JButton(btnStrs[i]);
jf.add(btn);
btn.addActionListener(dl); //创建图形按钮对象
}
for(int i=0;i<colors.length;i++)
{
JButton btn=new JButton();
btn.setBackground(color[i]);
btn.setPreferredSize(dim);
jf.add(btn);
btn.addActionListener(dl); //创建颜色按钮对象
}
4:显示界面
new DrawUI().showUI();
(三)监听器
监听器,即监听按钮,菜单,复选框这一类的组件,当监听的事件发生时,事件源会给监听器发送信息,同时监听器自身也会获得一份事件对象。
按钮是否需要监听,由我们自身来决定,当点击按钮之后,会默认调用监听器中的一个响应方法,并会打包一个事件对象传入方法中。
创建监听器用到的类:ActionListener(动作监听器),MouseListener(鼠标监听器)
需要用到的文件包:java.awt ;javax.swing;
java.awt.event.ActionEvent; java.awt.event.ActionListener;
java.awt.event.MouseEvent; java.awt.event.MouseListener;
(四)创建监听器类并绑定
1:创建一个类实现监听器
public class DrawListener implements ActionListener,MouseListener
{
String shapeName;
int x1,x2,y1,y2; //创建坐标
Grapics g=null; //创建图像类
}
2:重写动作监听器中抽象法并设置内容:
public void actionPerformed(AcitonEvent e) //动作监听器
{
System.out.println("按钮被点击了“);
String str=e.getAtionCommand();
if(str.equals("")
{
JButton btn=(JButton)e.getSource;
Color.color=btn.getBackground();
g.setColor(color);
System.out.println("Color"+color); //判断是否选择颜色
}else{
shapeName=str;
System.out.println("选择了"+str+""图形”); //判断选择图形
}
}
3:重新鼠标监听器中的类并设置内容:
public void mouseClicked(MouseEvent e)
{
System.out.println("mouseClicked");
}
public void mousePressed(MouseEvent e)
{
x1=e.getX();
x2=e.getY(); //选择图形
if(shapeName.equals("矩形"){
g.drawRect(x1,y1,(x2-x1)>0?(x2-x1):(x1-x2),(y2-y1)>0?(y2-y1):(y1-y2));
}if(shapeNmae.equals("圆")){
g.drawOval(x1,y1,(x2-x1)>0?(x2-x1):(x1-x2),(y2-y1)>0?(y2-y1):(y1-y2));
}if(shapeName.equals("直线"){
g.drawLine(x1,x2,y1,y2);
}if(shapeName.equals("实心圆")){
g.filloval(x1,y1,(x2-x1)>0?(x2-x1):(x1-x2),(y2-y1)>0?(y2-y1):(y1-y2));}
System.out.println("mouseRealeased");
}
public void mouseEntered(MouseEvent e)
{
System.out.println("mouseEntered");
}
public void mouseExited(MouseEvent e)
{
System.out.println ("mouseExited");
}
4.给窗体加上监听器:
Graphics g=if.getGraphics();
System.out.println(g);
try{
Thread.sleep(1000);
}catch(InterruptedException ex){
ex.printStackTrace();
}
g.drawLine(100,100,500,500);
jf.addMouseListener(dl);
dl.g=g;
(五)整体实现:
package LZH_1119;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class DrawUI
{
String[] btnStrs = {"直线","矩形","圆","实心圆"};
Color[]colors
{Color.BLACK,Color.WHITE,Color.LIGHT_GRAY,Color.GRAY,Color.RED,Color.GREEN,Color
.BLUE,Color.PINK,Color.YELLOW,Color.ORANGE};
public void showUI(){
JFrame jf = new JFrame ("图形绘制");
jf.setSize (1000,1000);
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
FlowLayout fl = new FlowLayout ();
jf.setLayout (fl);
DrawListener dl = new DrawListener ();
for(int i = 0; i < btnStrs.length ; i++){
JButton btn = new JButton (btnStrs[i]);
jf.add (btn);
btn.addActionListener (dl); //创建图形按钮对象
}
Dimension dim = new Dimension (50,50);
for (int i = 0; i < colors.length; i++) {
JButton btn = new JButton ();
btn.setBackground (colors[i]);
btn.setPreferredSize (dim);
jf.add (btn);
btn.addActionListener (dl); //颜色按钮对象
}
jf.setVisible (true);
Graphics g = jf.getGraphics();
System.out.println (g);
try {
Thread.sleep (1000);
}catch (InterruptedException ex) {
ex.printStackTrace ();
}
jf.addMouseListener (dl);
dl.g = g; // 将获取的画笔对象 传入监听器对象中
}
public static void main(String[] args){
new DrawUI ().showUI ();
}
}
package LZH_1119 ;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DrawListener implements ActionListener , MouseListener{
String shapeName;
int x1,y1,x2,y2;
Graphics g=null;
public void actionPerformed(ActionEvent e)
{
System.out.println ("按钮被点击了");
String str = e.getActionCommand ();
if(str.equals (""))
{ // 判断是颜色按钮
JButton btn =(JButton) e.getSource ();
Color color = btn.getBackground ();
g.setColor (color);
System.out.println ("Color:"+color);
}else{
//判断图形按钮
shapeName=str;
System.out.println ("选择了:"+str+"图形");
}
}
public void mouseClicked(MouseEvent e)
{
System.out.println ("mouseClicked");
}
public void mousePressed(MouseEvent e)
{
x1 = e.getX ();
y1 = e.getY ();
System.out.println ("mousePressed");
}
public void mouseReleased(MouseEvent e)
{
x1=e.getX();
x2=e.getY(); //选择图形
if(shapeName.equals("矩形")) {
g.drawRect(min(x1,x2),min(y1,y2),abs(x2-x1),abs(y2-y1));
}else if(shapeName.equals("圆")){
g.drawOval(min(x1,x2),min(y1,y2),abs(x2-x1),abs(y2-y1));
}else if(shapeName.equals("直线")){
g.drawLine(x1,y1,x2,y2);
}else if(shapeName.equals("实心圆")){
g.fillOval(min(x1,x2),min(y1,y2),abs(x2-x1),abs(y2-y1));}
System.out.println("mouseRealeased");
}
public int abs(int a) {
return (a>0)?a:-a;
}
public int min(int a,int b)
{
return a>b?b:a;
}
public void mouseEntered(MouseEvent e){
System.out.println ("mouseEntered");
}
public void mouseExited(MouseEvent e){
System.out.println ("mouseExited");
}
}