4 课后答案【khdaw_lxywyl】

更新时间:2023-06-10 06:24:01 阅读量: 实用文档 文档下载

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

课后答案网 -中国第一答案下载门户

答案分类

大学课后答案

进入社区淘答案

高中课后答案

(专业级搜索引擎为你提供服务)

公共基础课 | 通信/电子/电气 | 计算机/软件/网络/高一课后答案 | 高二课后答案 | 高三课后答案

信息/数学 | 物理/光学/声学/热学/力学 | 经济学/管理初中课后答案 学/法学 | 化学/环境/生物/医学/制药 | 土建/机械/材料/制造 | 哲学/心理学/政治学 | 文学/史学/外语/教育 | 其它类别

初一课后答案 | 初二课后答案 | 初三课后答案

考试课后答案

等级考试类答案 | 公务员考试答案

热门答案 最新求助 最新答案

程答案(全)【

k

题答案(微观.宏观

(茆诗松 著) 高

上下册 (同济大学

浩强 著) 清华大

新视野大学英语读写教高鸿业版西方经济学习概率论与数理统计教程高等数学(第五版)含C程序设计 第三版 (谭

新视野英语听力原文及理论力学 第六版 (哈尔线性代数 (同济大学应21世纪大学英语第3册复变函数与积分变换 答案 课后答案【

滨工业大学理论

用数学系 著) 高

(1-4)答案【

khd

第四版 (张元林 西

概率与数理统计 第二,C语言程序设计教程 第西方经济学(微观部分) C语言程序设计教程 第复变函数全解及导学[西三版 (浙江大学

三版 (谭浩强 张

(高鸿业 著) 中

二版 (谭浩强 张

安交大 第四版

]

社区服务社区热点进入社区

/2009-10-15

第4章 图形用户界面设计

【1】什么是图形用户界面?试列举出图形用户界面中你使用过的组件。 [解答]:图形用户界面或图形用户接口(Graphical User Interface,GUI)是指采用图形方式显示的计算机操作环境用户接口。与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。(比如你用windowsXP和使用DOS操作系统的差别)。GUI是事件驱动的,也就是说,一旦用户与GUI交互,GUI组件就会生成”事件“(动作)。常见交互包括移动鼠标、单击鼠标按钮、在文字段输入、从菜单选择一个选项以及关闭一个窗口等等。 在windwosXP的GUI中,使用过窗口,菜单条,按钮等

【2】简述Java的事件处理机制。什么是事件源?什么是监听者?在Java的图形用户界面中,谁可以充当事件源?谁可以充当监听者?

[解答]:java的事件处理机制就是,事件源允许监听器注册的事件对象,在事件发生的时候想相关的注册对象发送一个,事件对象,监听器便根据相关的信息来选择运行相关的代码。 事件源:英文名为event source,是指事件发生的地方,也就是引起事件的组件,按钮Button,文本组件等都可以当做事件源。比如说,你点击一个button,那么button就是事件源,要想使button对某些事件进行响应,你就需要注册特定的监听者。(具体请看第5章的事件处理)

监听者:英文名为event handler事件处理者,又叫监听器。具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。

在java中,AWT组件和swing组件都可以当做事件源;java.awt.event.*,里面各种类都可以为监听者。

【3】动作事件的事件源可以有哪些?如何响应动作事件?

[解答]:动作事件的事件源可以有:Button,JButton,MenuItem,等。 响应动作事件的过程一般为:

声明和实例化事件源,如:Button btn=new Button(“确定”);

注册监听:btn.addActionListener(this); //this指明是在当前类实现处理 实现接口:public void actionPerformed(ActionEvent e){//具体代码};

【4】说明文本框与标签之间的区别。

[解答]:文本框(TextField)和标签(Label)都可以进行文字表达。TextField允许用户编辑单行文本的文本组件,他可以添加相应的监听事件;而Label 对象是一个可在容器中放置文本的组件。一个标签只显示一行只读文本。文本可由应用程序更改,但是用户不能直接对其进行编辑。

【5】编写程序包含一个标签、一个文本框和一个按钮,当用户单击按钮时,程序把文本框中的内容复制到标签中。

[解答]:Test4_5.java import java.awt.*;

import java.awt.event.*;

www.

khd

1

aw.

com

www.

public class Test4_5 extends Frame implements ActionListener{ Label lb; TextField txtFl; Button btn; public Test4_5(){ //界面布局和初始化 super("文本框和标签的练习"); setSize(260,200); setVisible(true); setLayout(new FlowLayout());

lb=newLabel(" ");//用空格占位,以防止label个别字符出现问题 txtFl=new TextField(20); btn=new Button("显示字符"); add(txtFl);add(btn); add(lb);

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

validate(); //增加监听

btn.addActionListener(this); }

public void actionPerformed(ActionEvent e){ String strtmp=txtFl.getText(); lb.setText(strtmp);

lb.setForeground(Color.red); }

public static void main(String[] args){ new Test4_5(); } }

,在文本框中输入两个整数,单击“=”【6】设计一个加法计算器,如图4.25所示(课本P124)

按钮时,在第三个文本框中显示这两个数据的和。

[解答]:Test4_6.java import java.awt.*;

import java.awt.event.*;

class Test4_6 extends Frame implements ActionListener { TextField txtFl1,txtFl2,txtFl3;

2

khd

aw.

com

Button btn; public Test4_6(){ super("简单加法运算器"); setSize(300,200); setVisible(true); setLayout(new FlowLayout()); txtFl1=new TextField(5); txtFl2=new TextField(5); txtFl3=new TextField(10); btn=new Button("=");

add(new Label("请输入整数")); add(txtFl1); add(new Label("+")); add(txtFl2); add(btn); add(txtFl3); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); }} ); validate(); btn.addActionListener(this); }

public void actionPerformed(ActionEvent e){ int add=Integer.parseInt(txtFl1.getText()) +Integer.valueOf(txtFl2.getText()).intValue();//两种字符串转整形的方法

txtFl3.setText(String.valueOf(add)); }

public static void main(String[] args){ new Test4_6(); } }

【7】说明文本框与文本区之间的区别,它们都可以引发什么事件?如何响应此事件? [解答]:TextField 对象是允许编辑单行文本的文本组件。

www.

khd

3

aw.

com

TextArea 对象是显示文本的多行区域。可以将它设置为允许编辑或只读

TextFiled和TextArea可以引用KeyEvent,ActionEvent,分别用使用组件的 addKeyListener 方法注册和addActionListener以接收事件。

【8】设计一个计算器,其中要使用按钮、文本框、布局管理和标签等构件,能实现加、减、乘、除运算。

[解答]:Text4_8.java import java.awt.*;

import java.awt.event.*;

public class Test4_8 extends Frame implements ActionListener{ TextField txtFl1,txtFl2,txtFl3; Button btn1,btn2,btn3,btn4,btn5; public Test4_8(){

super("简单的四则运算器"); setSize(300,400); setVisible(true);

setLayout(new GridLayout(3,1));

txtFl1=new TextField(5); txtFl2=new TextField(5); txtFl3=new TextField(5); btn1=new Button("+"); btn2=new Button("-"); btn3=new Button("*"); btn4=new Button("÷");

Panel p1=new Panel();p1.add(txtFl1);p1.add(txtFl2);p1.add(new Label("="));p1.add(txtFl3);

Panel p2=new Panel();p2.add(btn1);p2.add(btn2);p2.add(btn3);p2.add(btn4);

add(new Label("请在下面输入运算数并运算规则进行运算:")); add(p1); add(p2);

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

www.

khd

4

aw.

com

float rs=0; if (e.getSource()==btn1){ rs=num1+num2;

txtFl3.setText(String.valueOf(rs)); } else if (e.getSource()==btn2) { rs=num1-num2;

txtFl3.setText(String.valueOf(rs)); } else if (e.getSource()==btn3) { rs=num1*num2;

txtFl3.setText(String.valueOf(rs)); } else if (e.getSource()==btn4) { rs=num1/num2;

txtFl3.setText(String.valueOf(rs)); } }

public static void main(String[] args){ new Test4_8(); } }

www.

【9】创建一个窗体,窗体中有一个按钮,当单击按钮后,就会弹出一个新窗体。

[解答]:Test4_9.java import java.awt.*;

import java.awt.event.*;

public class Test4_9 extends Frame implements ActionListener{ Button btn; public Test4_9(){

super("弹出窗口练习"); setSize(300,200);

5

khd

aw.

com

btn1.addActionListener(this); btn2.addActionListener(this); btn3.addActionListener(this); btn4.addActionListener(this); }

public void actionPerformed(ActionEvent e){ float num1=Float.valueOf(txtFl1.getText()).floatValue();

float num2=Float.valueOf(txtFl2.getText()).floatValue();//两种字符串转整形的方

www.

setVisible(true);

setLayout(new BorderLayout());

btn=new Button("点击我会弹出窗口"); Panel p1=new Panel(); p1.add(new Label(" ")); p1.add(btn); p1.add(new Label(" "));

add("South",p1); validate();

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

btn.addActionListener(this); }

public void actionPerformed(ActionEvent e){ new Test4_9(); }

public static void main(String[] args){ new Test4_9(); } }

【10】编写图形界面的Application程序,该程序包含一个菜单,选择这个菜单的“退出”选项可以关闭Application的窗口并结束程序。 [解答]:Test4_10.java

import java.awt.*;

import java.awt.event.*;

public class Test4_10 extends Frame { MenuBar mbar; Menu file,edit,help; MenuItem file_open,file_new,file_exit; MenuItem edit_copy,edit_cut; MenuItem help_about;

6

khd

aw.

com

www.

public Test4_10(){

super("菜单Application程序"); setSize(400,300); setVisible(true);

mbar=new MenuBar(); setMenuBar(mbar);

file=new Menu("文件"); edit=new Menu("编辑"); help=new Menu("帮助"); mbar.add(file); mbar.add(edit); mbar.add(help);

file_new=new MenuItem("新建"); file_open=new MenuItem("打开"); file_exit=new MenuItem("退出"); file.add(file_new); file.add(file_open); file.addSeparator(); file.add(file_exit);

edit_copy=new MenuItem("复制"); edit_cut=new MenuItem("粘贴"); edit.add(edit_copy); edit.add(edit_cut);

help_about=new MenuItem("关于"); help.add(help_about);

validate(); }

public static void main(String[] args){ new Test4_10(); } }

【11】什么是容器的布局?试列举并简述Java中常用的几种布局策略。

[解答]:AWT容器分为两类:外部容器和内部容器。其中,外部容器一般会独立存在,例如Frame类;而内部容器则会嵌套在外部容器内部使用,例如Panel类。容器的布局是指对添加的各个组件进行有序的、统一的对位置进行编排,使其更加美观。

(下面的例子参照网上/bookfiles/347/10034713585.shtml)

khd

7

aw.

com

1.顺序布局

顺序布局(Flow Layout)是最基本的一种布局,面板的默认布局就是顺序布局。顺序布局指的是把图形元件一个接一个地放在面板上。下面是一个顺序布局的例子。

package sample; import java.awt.*;

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyFlowLayout { private Frame f;

private Button button1, button2, button3;

public static void main (String args[]) {

MyFlowLayout mflow = new MyFlowLayout (); o mflow.go(); }

c public void go() {

f = new Frame ("FlowLayout演示网

");

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent evt) { 案

.

f.setVisible(false); 答

w f.dispose(); System.exit(0); 后

} });

a //f.setLayout(new FlowLayout());

d

f.setLayout(new FlowLayout(FlowLayout.LEADINGh, 20, 20)); button1 = new Button("确定"); button2 = new Button("k打开"); button3 = new Button("关闭"); .

f.add(button1); f.add(button2); f.add(button3); w f.setSize (200,200); f.pack();

f.setVisible(true); } }

程序运行结果见图10-3。

8

m

ww

图10-3 顺序布局(Flow Layout) 2.边界布局

边界布局(Border Layout)包括5个区:北区、南区、东区、西区和中区。这5个区在面板上的分布规律是“上北下南,左西右东”。下面是一个边界布局的例子。

package sample; import java.awt.*;

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyBorderLayout { Frame f;

Button east, south, west, north, center;

public static void main(String args[]) {

o MyBorderLayout mb = new MyBorderLayout(); mb.go(); } c

public void go() {

f = new Frame("BorderLayout 案

演示");

.

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent evt) { 答

w f.setVisible(false); f.dispose(); 后

System.exit(0); } 课

a }); d

f.setBounds(0, 0, 300, 300);

f.setLayout(new BorderLayout()); h

north = new Button("k.

北"); south = new Button("南"); east = new Button("东"); w west = new Button("西"); center = new Button("中");

f.add(BorderLayout.NORTH, north); f.add(BorderLayout.SOUTH, south); f.add(BorderLayout.EAST, east); f.add(BorderLayout.WEST, west); f.add(BorderLayout.CENTER, center);

f.setVisible(true); }

9

m

ww

}

程序运行结果见图10-4。

图10-4 边界布局(Border Layout) 3.网格布局 网格布局(Grid Layout)把面板分成一个个大小相等的网格,你可以给出网格的行数和列数。下面是一个网格布局的例子。

package sample; import java.awt.*;

import java.awt.event.*;

public class MyGridLayout { private Frame f;

private Button[] btn;

public static void main(String args[]) {

MyGridLayout grid = new MyGridLayout(); grid.go(); }

public void go() {

f = new Frame("GridLayout演示");

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent evt) { f.setVisible(false); f.dispose(); System.exit(0); } });

f.setLayout (new GridLayout (3, 3, 10, 10)); btn = new Button[9]; for(int i = 0; i <=8; i++) { int j = i + 1;

btn[i] = new Button("" + j); f.add(btn[i]); }

// f.pack();

10

www.

khd

aw.

com

f.setSize(100, 100); f.setVisible(true); } }

程序运行结果见图10-5。

图10-5 网格布局(Grid Layout) 4.卡片布局

卡片布局(Card Layout)把每个组件看作一张卡片,好像一副扑克牌,它们叠在一起,每次只有最外面的一个组件可以被看到。

package sample; import java.awt.*;

import java.awt.event.*;

public class MyCardLayout {

public static void main(String args[]) { new MyCardLayout().go(); }

public void go() {

final Frame f = new Frame("CardLayout演示"); f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent evt) { f.setVisible(false); f.dispose(); System.exit(0); } });

f.setSize(300, 100);

f.setLayout(new CardLayout());

final Frame f1 = f;

for(int i = 1; i <= 5; ++i) {

Button b = new Button("Button " + i); b.setSize(100, 25);

b.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

11

www.

khd

aw.

com

图10-6 卡片布局(Card Layout)

单击按钮Button1后,显示下一个按钮Button2,依此类推。 5.网格包布局

网格包 (GridBag)布局是基于网格布局之上的一种改进。和基本的网格布局不同的是,一个组件可以跨越一个或多个网格,这样一来增加了布局的灵活性。为了处 理网格的跨越性,我们可以使用GridBagConstraints类。有兴趣的读者可以参考Java API来了解它。

package sample; import java.awt.*; import java.util.*;

import java.awt.event.*;

public class MyGridBagLayout extends Panel { protected void makebutton(String name, GridBagLayout gridbag, GridBagConstraints c) { Button button = new Button(name); gridbag.setConstraints(button, c); add(button); }

public void go() {

GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setFont(new Font("Helvetica", Font.PLAIN, 14)); setLayout(gridbag);

c.fill = GridBagConstraints.BOTH; c.weightx = 1.0;

makebutton("Button001", gridbag, c);

www.

12

khd

aw.

com

CardLayout cl = (CardLayout)f1.getLayout(); cl.next(f1); } } );

f.add(b, "button" + i); }

f.setVisible(true); } }

程序运行结果见图10-6。

makebutton("Button2", gridbag, c); makebutton("Button3", gridbag, c);

c.gridwidth = GridBagConstraints.REMAINDER; //end row makebutton("Button4", gridbag, c);

c.weightx = 0.0; //reset to the default

makebutton("Button5", gridbag, c); //another row

c.gridwidth = 2; //GridBagConstraints.RELATIVE; //next-to-last in row makebutton("Button6", gridbag, c);

c.gridwidth = GridBagConstraints.REMAINDER; //end row makebutton("Button007", gridbag, c);

c.gridwidth = 1; //reset to the default c.gridheight = 2; c.weighty = 1.0;

o makebutton("Button8", gridbag, c);

c.weighty = 1.0; //reset to the default

c.gridwidth = GridBagConstraints.REMAINDER; //end row c c.gridheight = 1; //reset to the default makebutton("Button9", gridbag, c); 网

makebutton("Button10", gridbag, c); setSize(300, 100); 案

.

}

w public static void main(String args[]) {

final Frame f = new Frame("GridBagLayout 后

演示"); f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent evt) { 课

a f.setVisible(false); d

f.dispose(); System.exit(0); } h k});

.

MyGridBagLayout gb = new MyGridBagLayout(); gb.go();

f.add("Center", gb); w f.pack();

f.setVisible(true); } }

程序运行结果见图10-7。

13

m

ww

图10-7 网格包(GridBag)布局

【12】根据本章所学的内容编程:设计一个模拟的文字编辑器,并用菜单实现退出的功能。 [解答]:Test4_12.java import java.awt.*;

import java.awt.event.*;

public class Test4_12 extends Frame implements ActionListener{ MenuBar mbar; Menu file,edit,help; MenuItem file_open,file_new,file_save,file_exit; MenuItem edit_copy,edit_cut,edit_pase,edit_del; MenuItem help_about; o

Button btn_copy,btn_pase,btn_cut,btn_del;

c TextArea txtAr; boolean ifdo; 网

StringBuffer strtmp; 案

.

w public Test4_12(){

super("菜单Application后

程序"); setSize(400,300); a setVisible(true);

setLayout(new BorderLayout()); d

mbar=new MenuBar(); setMenuBar(mbar); h

strtmp=new kStringBuffer();

.

file=new Menu("文件"); w edit=new Menu("编辑"); help=new Menu("帮助"); mbar.add(file); mbar.add(edit); mbar.add(help);

file_new=new MenuItem("新建"); file_open=new MenuItem("打开"); file_open.setEnabled(false); file_save=new MenuItem("保存"); file_save.setEnabled(false);

14

m

ww

file_exit=new MenuItem("退出"); file.add(file_new); file.add(file_open); file.add(file_save); file.addSeparator(); file.add(file_exit);

edit_copy=new MenuItem("复制",new MenuShortcut(KeyEvent.VK_C)); edit_pase=new MenuItem("粘贴",new MenuShortcut(KeyEvent.VK_V)); edit_cut=new MenuItem("剪切",new MenuShortcut(KeyEvent.VK_X)); edit_del=new MenuItem("删除",new MenuShortcut(KeyEvent.VK_DELETE)); edit.add(edit_copy); edit.add(edit_pase); edit.add(edit_cut); edit.add(edit_del);

help_about=new MenuItem("关于"); help.add(help_about);

txtAr=new TextArea(8,10); Panel p1=new Panel(); btn_copy=new Button("复制"); btn_cut=new Button("剪切"); btn_pase=new Button("粘贴"); btn_del=new Button("删除"); p1.setLayout(new FlowLayout(FlowLayout.LEFT));

p1.add(btn_copy);p1.add(btn_cut);p1.add(btn_pase);p1.add(btn_del); add("North",p1); add("Center",txtAr); validate();

file_new.addActionListener(this); file_open.addActionListener(this); file_save.addActionListener(this); file_exit.addActionListener(this); edit_copy.addActionListener(this); edit_pase.addActionListener(this); edit_cut.addActionListener(this); edit_del.addActionListener(this); help_about.addActionListener(this); btn_copy.addActionListener(this); btn_cut.addActionListener(this); btn_pase.addActionListener(this); btn_del.addActionListener(this);

15

www.

khd

aw.

com

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

public void actionPerformed(ActionEvent e){ if (e.getSource()==file_new){ txtAr.setText(null); } else if (e.getSource()==file_open){ } else if (e.getSource()==file_save){ } else if (e.getSource()==file_exit){ System.exit(0); //退出 } else if (e.getSource()==edit_copy||e.getSource()==btn_copy){ //复制的实现 strtmp.delete(0,strtmp.length());

strtmp.append(txtAr.getSelectedText()); } else if (e.getSource()==edit_pase||e.getSource()==btn_pase){ //粘贴的实现 txtAr.insert(strtmp.toString(),txtAr.getSelectionEnd()); } else if (e.getSource()==edit_cut||e.getSource()==btn_cut){ //剪切的实现 strtmp.delete(0,strtmp.length());

strtmp.append(txtAr.getSelectedText()); String strtmp1=new String(txtAr.getText().substring(0,txtAr.getSelectionStart())); String strtmp2=new String(txtAr.getText().substring(txtAr.getSelectionEnd(),txtAr.getText().length())); //返回一个新的 String,它包含此序列当前所包含的字符子序列。 txtAr.setText(strtmp1+strtmp2); } else if(e.getSource()==edit_del||e.getSource()==btn_del){ String strtmp1=new String(txtAr.getText().substring(0,txtAr.getSelectionStart())); String strtmp2=new String(txtAr.getText().substring(txtAr.getSelectionEnd(),txtAr.getText().length())); //返回一个新的 String,它包含此序列当前所包含的字符子序列。 txtAr.setText(strtmp1+strtmp2); } }

public static void main(String[] args){

16

www.

khd

aw.

com

new Test4_12(); } }

【13】创建一个输入对话框,从对话框中输入文字,当按下“确定”按钮后,能在屏幕上显示输入的文字。

[解答]:Test4_13.java

import java.awt.*;

import java.awt.event.*;

class Test4_13 extends Frame implements ActionListener{ TextArea txtAr; Button btn1; public Test4_13(){ super("对话框练习"); setSize(300,400); setVisible(true); setLayout(new BorderLayout()); btn1=new Button("打开对话框"); txtAr=new TextArea(8,10); add("North",btn1); add("Center",txtAr); validate(); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); }} ); btn1.addActionListener(this); }

public void actionPerformed(ActionEvent e){ DiaObj dia=new DiaObj(this,txtAr); //声明和实例话对话框,传递frame,和txtar参数 }

public static void main(String[] args){ new Test4_13(); } }

17

www.

khd

aw.

com

class DiaObj implements ActionListener { Frame fr=new Frame(); TextArea txtAr2=new TextArea(8,10); TextField txtFl=new TextField(20);

Button btnSend=new Button("发送文字"); Dialog dia;

//初始化DiaObj,并定义参数fr,txtAr2 public DiaObj(Frame fr,TextArea txtAr2){ this.txtAr2=txtAr2; this.fr=fr; o dia=new Dialog(fr,"传递消息对话框..",true); dia.setSize(200,100); dia.setLayout(new FlowLayout()); c dia.add(txtFl); dia.add(btnSend); 网

btnSend.addActionListener(this); 案

.

w dia.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent 后

awe){ dia.setVisible(false); d

//退出对话框 }} ); dia.validate(); dia.setVisible(true); } h

.

public void actionPerformed(ActionEvent e){ k txtAr2.append(txtFl.getText()+"\n"); txtFl.setText("");//清空内容 w } }

18

m

ww

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

Top