GUI课后题解答-6

1.       什么是事件,事件源和处理器,并描述三者的工作关系。

事件:用户对GUI组件的一个操作,称之为一个事件。

事件源:发生事件的组件就是事件源。

事件处理器:某个java类中负责处理时间的成员方法。

1)  先在组件上进行事件监听器注册

2)  当组件受到外部的作用时产生一个事件对象

3)  事件监听器把组件对象传给事件处理器进行处理

 

2.       描述事件处理的编码实现过程。

1)  首先产生一个组件对象

2)  编写组件的监听器类,事件监听器类内部相关的方法。

3)  在组件上添加相关的监听器对象。

3.       描述事件监听器类和事件适配器类的关系和区别。

事件适配器类是事件监听器类的子类。事件适配器类可以只重写用的着的方法,而事件监听器类实现的是接口,要把接口里所有的方法都实现了。

4.       描述在窗口上画直线的程序编写过程和组件重绘的原理

1)  编写一个直线类:设置起点和终点的坐标为四个成员变量,一个构造方法得到起点和终点的四个坐标。一个画线的方法,设置线的颜色,界面上字体的格式,并根据起点坐标和终点坐标画线。

package GUI;

 

import java.awt.*;

import java.awt.event.*;

import java.util.*;

 

public class MyLine {

    private int orgX;

    private int orgY;

    private int endX;

    private int endY;

    public MyLine(int orgX,int orgY,int endX,int endY)

    {

       this.orgX=orgX;

       this.orgY=orgY;

       this.endX=endX;

       this.endY=endY;

    }

    public void drawMe(Graphics g)

    {

       g.setColor(Color.RED);  //设置字体的颜色为红色

       g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置字的格式

       g.drawString(orgX+","+orgY, orgX, orgY);//在初始坐标处划线

       g.drawString(endX+","+endY, endX, endY);//在末坐标处划线

       g.drawLine(orgX, orgY, endX, endY);

    }

}

 

 

2)  在主类里:先用代码实现一个可以关闭的窗口,设置线的初始坐标和末尾坐标为全局变量,设置一个成员变量用来存储界面上每条线的横纵坐标。在构造方法里添加鼠标事件的适配器,在适配器里添加鼠标按下时的方法,获得线起始点的坐标。添加鼠标释放时的方法,获得线终点的方法,产生一个直线的对象并存到集合里去。然后调用重绘方法repaint在界面上进行绘图。

 3)绘图方法paint:循环在集合里获得保存的直线对象,调用直线对象里的画线方法画线。

package GUI;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class DrawLine extends Frame {

    int orgX;//初始点的横坐标

    int orgY;//初始点的纵坐标

    int endX;

    int endY;

    Vector vLines=new Vector();

    public void paint(Graphics g)

    {

       Enumeration e=vLines.elements();

       while (e.hasMoreElements()) {

           MyLine line=(MyLine)e.nextElement();

           line.drawMe(g);

       }

    }

    public DrawLine()//添加构造方法

    {

       addWindowListener(new WindowAdapter(){//注册窗口适配器

 

 

           public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

              dispose();     //释放该窗口

              System.exit(0);//停止程序的运行

           }

 

       });

       this.addMouseListener(new MouseAdapter(){

          

           public void mousePressed(MouseEvent e)

           {

              orgX=e.getX();//获得初始点的横坐标

              orgY=e.getY();//获得初始点的纵坐标

           }

           public void mouseReleased(MouseEvent e)

           {

              endX=e.getX();//获得末点横坐标

              endY=e.getY();//获得末点纵坐标

              vLines.add(new MyLine(orgX,orgY,endX,endY));//存储坐标

              repaint();//调用绘图方法,重绘直线

           }

       });

    }

    public static void main(String[] args) {

       System.out.println("starting TestMyButton..");

       DrawLine drawLine=new DrawLine();//实例化定义的创库

       drawLine.setSize(400, 400);//设置窗口的大小

       drawLine.setTitle("TestMyButton");

       drawLine.setVisible(true);

    }

}

5

6.

7.重写计算器的添加按钮的方法

package calculator;

import java.awt.*;

import java.awt.event.*;

 

import javax.swing.*;

 

public class Calculator extends JFrame implements ActionListener {

    JTextField jtf=new JTextField();

 

    public Calculator()//添加构造方法

    {

       Container c=getContentPane();

       jtf.setHorizontalAlignment(JTextField.RIGHT);

      

       JPanel jp1=new JPanel();

       GridLayout gl=new GridLayout(4,4);

       jp1.setLayout(gl);

      

       c.add(jtf,BorderLayout.NORTH);

       c.add(jp1,BorderLayout.CENTER);

      

       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       //把按钮上要显示的数字都存在数组里

       String [] ch={"1","2","3","+","4","5","6","-","7","8","9","*","0",".","=","//"};

       for (int i = 0; i < ch.length; i++) {

           JButton b=this.calButton(ch[i]);//调用方法,产生按钮

           b.addActionListener(this);//给每个按钮添加监听器

           jp1.add(b);               //把按钮添加到案板上

       }     

    }

    public static void main(String[] args) {

       System.out.println("starting TestStopWatch..");

       Calculator t=new Calculator();

       t.setSize(400, 400);//设置窗口的大小

       t.setTitle("TestMyButton");

       t.setVisible(true);

    }

    public void actionPerformed(ActionEvent arg0) {

       jtf.setText(jtf.getText()+arg0.getActionCommand());

      

      

    }

    //根据输入的字符串产生一个按钮对象,并返回

    public JButton calButton(String btnName)

    {

       JButton b=new JButton(btnName);

       return b;

    }

 

}

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值