Java程序设计实训教程参考答案10

更新时间:2024-04-21 13:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.AWT组件集提供的组件大致可以分为哪几类?各起有什么作用?

AWT组件大致可以分为以下三类:

(1)容器类组件 (2)布局类组件 (3)普通组件类

容器类组件可以用来容纳其他普通组件或者甚至是容器组件自身,起到组织用户界面的作用;布局类组件本身是非可视组件,但它们却能很好地在容器中布置其他普通可视组件;AWT提供了一系列的普通组件以构建用户图形界面,它们主要包括:标签、文本框、文本域、按钮、复选框、单选框、列表框、下拉框、滚动条和菜单等。 2.AWT提供的布局方式有哪几种?请分别进行简述。 (1)FlowLayout

FlowLayout是最简单的一种布局方式,被容纳的可视组件从左向右,从上至下依次排

列,若一组件在本行放置不下,就自动排到下一行的开始处,该方式为Panel类和Applet类容器的默认布局方式。 (2)BorderLayout

BorderLayout布局方式的特点是:将容器划分为“东”“西”“南”“北”“中”五个区,

BorderLayout.EAST、BorderLayout. WEST、BorderLayout.SOUTH、

分别为

BorderLayout.NORTH和BorderLayout.CENTER,每个区可以摆放一个组件,因此最多可以在BorderLayout的容器组件中放置五个子组件,前面已提到过,该布局方式是Frame或Dialog容器类组件的默认布局方式。 (3)GridLayout

GridLayout布局将容器划分为行和列的网格,每个网格单元可以放置一个组件,组件通

过add()方法从上到下,从左至右顺序加入网格各个单元中,因此,在使用这种布局时,用户应首先设计好排列位置,然后再依次调用add()方法进行添加。 (4)GridBagLayout

GridBagLayout是所有AWT布局管理方式中最繁的,同时也是功能最强的,这主要是

因为它提供了许多可设置参数,使得容器的布局方式可以得到准确的控制,尽管设置步骤相对要复杂得多,但是只要理解了它的基本布局思想,就可以很容易使用GridBagLayout来进行界面设计了。 (5)CardLayout

CardLayout布局将组件(通常是Panel类的容器组件)象扑克牌(卡片)一样摞起来,每次只能显示其中的一张,实现分页的效果,每一页中可以有各自的界面,这样就相当于扩

展了原本有限的屏幕区域。

3.简述如何创建AWT的菜单系统。

AWT提供的菜单系统类包括:MenuBar、MenuItem、Menu、CheckboxMenuItem以及PopupMenu。MenuBar类对应菜单系统的整体,Menu类对应菜单系统中的一列菜单(实际上它只是一种特殊的菜单项),MenuItem和CheckboxMenuItem类则对应具体的菜单项,其中CheckboxMenuItem为带复选框的菜单项,而PopupMenu类对应弹出式菜单,它是菜单Menu类的子类。菜单系统创建好后,最后必须调用Frame类的setMenuBar()方法将其加入到框架界面中。

4.简述AWT提供的基于事件监听模型的事件处理机制。

基于事件监听模型的事件处理是从一个事件源授权到一个或多个事件监听者,组件作为事件源可以触发事件,通过addXXXlistener()方法向组件注册监听器,一个组件可以注册多个监听器,如果组件触发了相应类型的事件,此事件被传送给已注册的监听器,事件监听器通过调用相应的实现方法来负责处理事件的过程。

5.列出几个你所熟悉的AWT事件类,并举例说明什么时候会触发这些事件。

(1)ActionEvent类:可以是鼠标单击按钮或者菜单,也可以是列表框的某选项被双击

或文本框中的回车行为。

(2)KeyEvent类:当用户按下或释放键时产生该类事件,也称为键盘事件。 (3) MouseEvent类:当用户按下鼠标、释放鼠标或移动鼠标时会产生鼠标事件。

6.AWT规定的MouseEvent类对应哪些监听器接口?这些接口中都定义有哪些抽象方法?

(1)MouseListener

public abstract void mouseClicked(MouseEvent mouseevent); public abstract void mousePressed(MouseEvent mouseevent); public abstract void mouseReleased(MouseEvent mouseevent); public abstract void mouseEntered(MouseEvent mouseevent); public abstract void mouseExited(MouseEvent mouseevent);

(2)MouseMotionListener

public abstract void mouseDragged(MouseEvent mouseevent); public abstract void mouseMoved(MouseEvent mouseevent);

7.简述AWT为何要给事件提供相应的适配器(即Adapter类)?

Java规定:实现一个接口时必须对该接口的所有抽象方法进行具体的实现,哪怕有些抽象方法事件用户根本用不上,也要将其实现,比如上例中的keyPressed()方法,为此,Java提供了一种叫做Adapter(适配器)的抽象类来简化事件处理程序的编写。适配器类很简单,它其实就是一个实现了接口中所有抽象方法的“空”类,本身不提供实际功能, 8.简述AWT与Swing组件集间的区别?

AWT组件集依赖于特定的平台,而Swing组件集独立于运行平台;

Swing组件集实现了模型与视图和组件相分离;

Swing组件集提供了比AWT更多、功能更强的组件,增加了新的布局管理方式(如BoxLayout),同时还设计出了更多的处理事件。

9.创建一个有文本框和三个按钮的框架窗口程序,同时要求按下不同按钮时,文本框中能显示不同的文字。 import java.awt.*; import java.awt.event.*; public class ActionEvent1 {

private static Frame frame; //定义为静态变量以便main使用 private static Panel myPanel; //该面板用来放置按钮组件 private Button button1; //这里定义按钮组件 private Button button2; //以便addActionListener private Button button3;

private TextField textfield1; //定义文本框组件

public ActionEvent1() //构造方法, 建立图形界面 {

// 创建面板容器类组件 myPanel = new Panel(); // 创建按钮组件

button1 = new Button(\按钮1\button2 = new Button(\按钮2\button3 = new Button(\按钮3\textfield1 = new TextField(30);

MyListener myListener = new MyListener(); // 建立一个actionlistener让两个按钮共享 button1.addActionListener(myListener); button2.addActionListener(myListener); button3.addActionListener(myListener); textfield1.addActionListener(myListener);

}

myPanel.add(button1); // 添加组件到面板容器 myPanel.add(button2); myPanel.add(button3); myPanel.add(textfield1);

//定义行为事件处理内部类,它实现ActionListener接口

private class MyListener implements ActionListener { /*

利用该内部类来监听所有行为事件源产生的事件 */ }

public static void main(String s[]) {

ActionEvent1 ae = new ActionEvent1(); // 新建ActionEvent1组件 public void actionPerformed(ActionEvent e) { }

// 利用getSource()方法获得组件对象名

// 也可以利用getActionCommand()方法来获得组件标识信息 // 如 e.getActionCommand().equals(\按钮1\Object obj = e.getSource(); if (obj == button1)

textfield1.setText(\按钮1被单击\else if (obj == button2)

textfield1.setText(\按钮2被单击\else if (obj == button3)

textfield1.setText(\按钮3被单击\else

textfield1.setText(\

}

}

frame = new Frame(\新建Frame // 处理窗口关闭事件的通常方法(属于匿名内部类) frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); frame.add(myPanel); frame.pack(); frame.setVisible(true);

10.创建一个带有多级菜单系统的框架窗口程序,要求每单击一个菜单项,就弹出一个相对应的信息提示框。 import java.awt.*; import java.awt.event.*; import javax.swing.*;

class DialogFrame extends JFrame implements ActionListener { public DialogFrame() { setTitle(\练习11\ setSize(300, 300);

addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } );

JMenuBar mbar = new JMenuBar(); setJMenuBar(mbar);

JMenu fileMenu = new JMenu(\文件\ JMenu s = new JMenu(\特殊功能\

s.add(specials[0]);

specials[0].addActionListener(this); s.add(specials[1]);

specials[1].addActionListener(this); mbar.add(fileMenu); fileMenu.add(s);

aboutItem = new JMenuItem(\关于\ aboutItem.addActionListener(this); fileMenu.add(aboutItem);

exitItem = new JMenuItem(\退出\ exitItem.addActionListener(this); fileMenu.add(exitItem); }

public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if(source == aboutItem)

{ if (dialog1 == null) // first time

dialog1 = new AboutDialog(this,\关于\ dialog1.show(); }

else if(source == exitItem) { System.exit(0); }

else if(source == specials[0]) { if (dialog2 == null) // first time

dialog2 = new AboutDialog(this,\功能1\ dialog2.show(); }

else if(source == specials[1]) { if (dialog3 == null) // first time

dialog3 = new AboutDialog(this,\功能2\ dialog3.show(); } }

private AboutDialog dialog1; private AboutDialog dialog2; private AboutDialog dialog3; private JMenuItem aboutItem; private JMenuItem exitItem; private JMenuItem[] specials = { new JMenuItem(\功能1\ new JMenuItem(\功能2\ }; }

class AboutDialog extends JDialog

{ public AboutDialog(JFrame parent, String title) { super(parent, title, true); JPanel p2 = new JPanel(); JButton ok = new JButton(\ p2.add(ok);

getContentPane().add(p2, \ ok.addActionListener(new ActionListener()

{ public void actionPerformed(ActionEvent evt) { setVisible(false); } } );

setSize(250, 150); } }

public class DialogTest {

public static void main(String[] args)

{ JFrame f = new DialogFrame(); f.show(); } }

11.请分别用AWT及Swing组件来设计实现计算器程序,要求能完成简单四则运算。 下面给出Swing版的参考程序,AWT版的类似。 import java.awt.*; import java.awt.event.*; import javax.swing.*;

class CalculatorPanel extends Jpanel implements ActionListener { public CalculatorPanel()

{ setLayout(new BorderLayout()); display = new JTextField(\ display.setEditable(false); add(display, \ JPanel p = new JPanel();

p.setLayout(new GridLayout(4, 4)); String buttons = \ for (int i = 0; i < buttons.length(); i++)

addButton(p, buttons.substring(i, i + 1)); add(p, \ }

private void addButton(Container c, String s) { JButton b = new JButton(s); c.add(b);

b.addActionListener(this); }

public void actionPerformed(ActionEvent evt) { String s = evt.getActionCommand();

if ('0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals(\

{ if (start) display.setText(s);

else display.setText(display.getText() + s); start = false; } else { if (start)

{ if (s.equals(\

{ display.setText(s); start = false; } else op = s; } else

{ double x =

Double.parseDouble(display.getText()); calculate(x); op = s; start = true; } } }

public void calculate(double n) { if (op.equals(\ else if (op.equals(\ else if (op.equals(\ else if (op.equals(\ else if (op.equals(\ display.setText(\ }

private JTextField display;

private double arg = 0; private String op = \ private boolean start = true; }

class CalculatorFrame extends JFrame { public CalculatorFrame() { setTitle(\ setSize(200, 200);

addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } );

Container contentPane = getContentPane(); contentPane.add(new CalculatorPanel()); } }

public class Calculator

{ public static void main(String[] args) { JFrame frame = new CalculatorFrame(); frame.show(); } }

本文来源:https://www.bwwdw.com/article/ctxp.html

Top