Java 习题9 参考答案及解析

1.问答题

(1)JFrame类的对象的默认布局是什么布局?
(2)一个容器对象是否可以使用add方法添加一个JFrame窗口?
(3)JTextField可以触发什么事件?
(4)JTextArea中的文档对象可以触发什么类型的事件?
(5)MouseListener接口中有几个方法?
(6)处理鼠标拖动触发的MouseEvent事件需要使用哪些接口?


问答题解析

1.Frame容器的默认布局是BorderLayout布局。
2.不可以。JFrame窗口是一个底层容器,其他组件必须被添加到底层容器中,以便借助这个底层容器和操作系统进行交互。窗口默认被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。
3.ActionEvent
4.DocumentEvent
5.5个。分别是在事件源上按下鼠标键。在事件源上释放鼠标键。在事件源上单击鼠标。鼠标进入事件源。鼠标退出事件源。
6.MouseMotionListener


2.选择题

(1)下列哪个叙述是不正确的?
A.一个应用程序中最多只有一个窗口。
B.JFrame创建的窗口默认是不可见的。
C.不可以向JFrame窗口中添加JFrame窗口。
D.窗口可以调用setTitle(String s)方法设置窗口的标题。
(2)下列哪个叙述是不正确的?
A.JButton对象可以使用addActionListener(ActionListener 1)方法将没有实现ActionListener接口的类的实例注册为自己的监视器。
B.对于有监视器的JTextField文本框,如果该文本框处于活动状态(有输入焦点)时,用户即使不输入文本,只要按回车(Enter)键也可以触发ActoinEvent事件。
C.监视KeyEvent事件的监视器必须实现KeyListener接口。
D.监视WindowEvent事件的监视器必须实现WindowListener接口。
(3)下列哪个叙述是不正确的?
A.使用FlowLayout布局的容器最多可以添加5个组件。
B.使用BoderLayout布局的容器被划分为5个区域。
C.Jpanel的默认布局是FlowLayout布局。
D.JDialog的默认布局是BorderLayout布局。


选择题解析

1.A
一个应用程序中可以有若干个窗口。窗口默认是不可见的,需要调用setVisible(boolean b)设置窗口的可见性。
2.A
没有实现ActionListener接口的类的实例不能被注册
3.A
流水布局可以添加若干个组件。


3.编程题

(1)编写应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayout布局。窗口中添加两个文本区,当我们在一个文本区输入若干个数时,另一个文本区同时对你输入的数进行求和运算并求出平均值,也就是说随着i输入的变化,另一个文本区不断地更新求和及平均值。


Java
public class E{
    public static void main(String args[]){
        Computer com = new Computer();
    }
}
Java
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class Computer extends JFrame implements DocumentListener {
    JTextArea text1, text2;
    int count = 0;
    double sum = 0, aver = 0;

    Computer() {
        setLayout(new FlowLayout());
        text1 = new JTextArea(6, 20);
        text2 = new JTextArea(6, 20);
        add(new JScrollPane(text1));// 滚动窗格
        add(new JScrollPane(text2));
        text2.setEditable(false);// 不可编辑
        (text1.getDocument()).addDocumentListener(this);// 文本区调用getDocument方法放回所维护的文档,能触发DocumentEvent事件
        setSize(300, 320);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    }

    @Override
    public void insertUpdate(DocumentEvent e) {
        changedUpdate(e);

    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        changedUpdate(e);

    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        String s = text1.getText();
        String[] a = s.split("[^0123456789.]+");// 正则表达式,除了0-9和小数点以外的字符作为分隔符
        sum = 0;
        aver = 0;
        count = 0;
        for (int i = 0; i < a.length; i++) {
            try {
                sum = sum + Double.parseDouble(a[i]);// 转换为double类型
                count++;
            } catch (Exception ee) {

            }
        }
        aver = sum / count;
        text2.setText(null);
        text2.append("\n和:" + sum);
        text2.append("\n平均值:" + aver);
    }

}

Java 习题9 参考答案及解析_第1张图片


(2)编写一个应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayout布局,设计4个按钮,分别命名为“加”、“减”、“乘”、“除”,另外,窗口中还有3个文本框。单击相应的按钮,将两个文本框的数字做运算,在第三个文本框中显示结果。要求处理NumberFormatException异常。

Java
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Face face = new Face();
    }

}
Java
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Face extends JFrame implements ActionListener {
    JButton jia;
    JButton jian;
    JButton cheng;
    JButton chu;
    JTextField one;
    JTextField two;
    JTextField three;
    JLabel label;

    public Face() {
        init();
        setVisible(true);
        setResizable(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    public void init() {
        setLayout(new FlowLayout());
        setSize(300, 320);
        setTitle("计算");
        jia = new JButton("加");
        jian = new JButton("减");
        cheng = new JButton("乘");
        chu = new JButton("除");
        one = new JTextField(10);
        two = new JTextField(10);
        three = new JTextField(10);
        label = new JLabel(" ", JLabel.CENTER);
        label.setBackground(Color.green);
        add(one);
        add(label);
        add(two);
        add(three);
        add(jia);
        add(jian);
        add(cheng);
        add(chu);
        jia.addActionListener(this);
        jian.addActionListener(this);
        cheng.addActionListener(this);
        chu.addActionListener(this);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        double n;
        if (e.getSource() == jia) {
            double n1, n2;
            try {
                n1 = Double.parseDouble(one.getText());
                n2 = Double.parseDouble(two.getText());
                n = n1 + n2;
                three.setText(String.valueOf(n));
                label.setText("+");
            } catch (NumberFormatException ee) {
                three.setText("请输入数字字符");
            }
        } else if (e.getSource() == jian) {
            double n1, n2;
            try {
                n1 = Double.parseDouble(one.getText());
                n2 = Double.parseDouble(two.getText());
                n = n1 - n2;
                three.setText(String.valueOf(n));
                label.setText("-");
            } catch (NumberFormatException ee) {
                three.setText("请输入数字字符");
            }
        } else if (e.getSource() == cheng) {
            double n1, n2;
            try {
                n1 = Double.parseDouble(one.getText());
                n2 = Double.parseDouble(two.getText());
                n = n1 * n2;
                three.setText(String.valueOf(n));
                label.setText("*");
            } catch (NumberFormatException ee) {
                three.setText("请输入数字字符");
            }
        } else if (e.getSource() == chu) {
            double n1, n2;
            try {
                n1 = Double.parseDouble(one.getText());
                n2 = Double.parseDouble(two.getText());
                n = n1 / n2;
                three.setText(String.valueOf(n));
                label.setText("/");
            } catch (NumberFormatException ee) {
                three.setText("请输入数字字符");
            }
        }
        validate();
    }
}

Java 习题9 参考答案及解析_第2张图片

你可能感兴趣的:(Java习题,Java习题讲解)