GUI课后题解答-6

    技术2024-12-16  51

    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)