(三)java.画图实现-基于鼠标监听器

(一)界面的内容

基于事件监听机制,一个界面包括容器,内容,组件,规则方式,包等,其中容器是可以加载其它组件的窗体,内容包括有文本和图片,组件有按钮,菜单和输入框,规则方式则包括尺寸,大小,布局。

而包则有很多种,其中较为常用的有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");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值