当前位置:文档之家› 解析JAVA程序设计第六章课后答案

解析JAVA程序设计第六章课后答案

第6章习题解答

1.简述Java中设计图形用户界面程序的主要步骤。

对于设计图形用户界面程序而言,一般分为两个步骤:第一步,设计相应的用户界面,并根据需要对相关的组件进行布局;第二步,添加相关的事件处理,如鼠标、菜单、按钮和键盘等事件。

2.试说明容器与组件之间的关系。

组件(component)是图形用户界面中的各种部件(如标签、按钮、文本框等等),所有的组件类都继承自JComponent类。容器(container)是用来放置其他组件的一种特殊部件,在java中容器用Container类描述。

3.阅读下面程序,说明其运行结果和功能。

//filename:MyFrame.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MyFrame

{

public static void main(String agrs[]){

JFrame f=new JFrame("简单窗体示例");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JLabel l=new JLabel("习题1");

f.getContentPane().add(l,BorderLayout.CENTER);

f.pack();

f.setVisible(true);

}

}

程序的运行结果如下:

4.阅读下面程序,说明其运行结果和功能。

//filename:TestButton.java

import java.awt.*;

import javax.swing.*;

public class TestButton extends JFrame

{

JButton b1,b2;

TestButton(String s)

{

super(s);

b1=new JButton("按钮1");

b2=new JButton("按钮2");

setLayout(new FlowLayout());

add(b1);

add(b2);

setSize(300,100);

setVisible(true);

}

public static void main(String args[]){ TestButton test;

test=new TestButton("测试按钮"); }

}

程序的运行结果如下:

5.阅读下面程序,说明其运行结果和功能。

//filename:TestCheck.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class TestCheck extends JFrame

{

JLabel l1,l2,l3;

TextField name;

CheckboxGroup g;

Checkbox c1,c2,c3,c4,c5;

TestCheck(){}

void go()

{

setTitle("测试选择按钮");

l1=new JLabel("姓名:");

l2=new JLabel("性别:");

l3=new JLabel("爱好:");

name=new TextField(20);

g=new CheckboxGroup();

c1=new Checkbox("男",true,g);

c2=new Checkbox("女",false,g);

c3=new Checkbox("唱歌");

c4=new Checkbox("跳舞");

c5=new Checkbox("上网");

setLayout(new FlowLayout());

add(l1);add(name);

add(l2);add(c1);add(c2);

add(l3);

add(c3);add(c4);add(c5);

pack();

show();

}

public static void main(String[] args){

TestCheck test=new TestCheck();

test.go();

test.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ System.exit(0);

}

});

}

}

6.试设计一个计算器程序的界面。

//计算器Count.java

import java.awt.*;

import java.awt.event.*;

class MainPanel extends Panel //Screen Panle class

{

TextField scn=new TextField(""); //TextField screen

String

str[]={"7","8","9","*","4","5","6","-","1","2","3","+","0",".","/","="}; Button btn[]=new Button[str.length];

Button clear=new Button("清除");

String temp,op,tempInKey,keyDown; //??

char opChar; //?

public float num1,num2;

boolean flag;

MainPanel()

{

Panel ScreenPanel = new Panel(); //Screen Panel

ScreenPanel.setLayout(new BorderLayout());//Screen in the north ScreenPanel.add(scn,BorderLayout.CENTER);

scn.disable(); //can not receive event

Panel ButtonPanel = new Panel(); //Button Panel

ButtonPanel.setLayout(new GridLayout(4,4));

for (int i=0;i<16;i++)

{

btn[i]=new Button(str[i]); //new Button

ButtonPanel.add(btn[i]); //add to panel

}

Panel ButtonPane2 = new Panel(); //Button Panel

ButtonPane2.add(clear);

setLayout(new BorderLayout()); //Main panel

add(ScreenPanel,BorderLayout.NORTH);

add(ButtonPanel,BorderLayout.CENTER);

add(ButtonPane2,BorderLayout.SOUTH);

}

}

class CountFrame extends Frame //construct a frame

{

public CountFrame(String title)

{

super(title);

MainPanel t=new MainPanel(); //Main Panel

add(t); //add MainFrame

addWindowListener(new end()); //add listener

}

class end extends WindowAdapter //close the window,inner class {

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

}

class Count //main()

{

public static void main(String args[])

{

CountFrame frm=new CountFrame("JAVA计算器"); frm.setSize(220,180); //new frame,go above

frm.show();

}

}

程序的运行结果为:

7.试设计一个电话簿程序的界面。

//PhoneBook.java

import javax.swing.*;

import java.awt.*;

public class PhoneBook extends JFrame

{

void go()

{

this.setTitle("电话簿程序");

this.setSize(400,200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container contentPane = this.getContentPane();

String[] data = {"张三", "李四", "赵二", "王五"}; JList dataList = new JList(data);

dataList.setSelectedIndex(1); // select "two"

dataList.getSelectedValue(); // returns "two"

JPanel p1=new JPanel();

JPanel p2=new JPanel();

JPanel p3=new JPanel();

p1.setSize(200,400);

contentPane.add(p1,BorderLayout.WEST);

contentPane.add(p2,BorderLayout.CENTER);

contentPane.add(p3,BorderLayout.SOUTH);

p1.add(dataList);

p2.setLayout(new GridLayout(6,1));

JLabel l1=new JLabel("姓名:");

JTextField t1=new JTextField("李四");

JLabel l2=new JLabel("联系电话:");

JTextField t2=new JTextField("023-********"); p2.add(l1);

p2.add(t1);

p2.add(l2);

p2.add(t2);

p3.add(new JButton("添加"));

p3.add(new JButton("删除"));

p3.add(new JButton("修改"));

this.show();

}

public static void main(String[] g)

{

PhoneBook h=new PhoneBook();

h.go();

}

}

8.为6和7题的添加事件处理功能。

第6题加事件处理:

//Count.java

import java.awt.*;

import java.awt.event.*;

class MainPanel extends Panel //Screen Panle class

{

TextField scn=new TextField(""); //TextField screen

String

str[]={"7","8","9","*","4","5","6","-","1","2","3","+","0",".","/","="}; Button btn[]=new Button[str.length];

Button clear=new Button("清除");

String temp,op,tempInKey,keyDown; //??

char opChar; //?

public float num1,num2;

boolean flag;

MainPanel()

{

Panel ScreenPanel = new Panel(); //Screen Panel

ScreenPanel.setLayout(new BorderLayout());//Screen in the north ScreenPanel.add(scn,BorderLayout.CENTER);

scn.disable(); //can not receive event

keyInput kPut=new keyInput(); //keyAction

scn.addKeyListener(kPut);

Panel ButtonPanel = new Panel(); //Button Panel

ButtonPanel.setLayout(new GridLayout(4,4));

for (int i=0;i<16;i++)

{

btn[i]=new Button(str[i]); //new Button

ButtonPanel.add(btn[i]); //add to panel

btn[i].addActionListener(new lsn());

btn[i].addKeyListener(kPut); //buttons be listened }

Panel ButtonPane2 = new Panel(); //Button Panel

ButtonPane2.add(clear);

clear.addActionListener(new lsn());

clear.addKeyListener(kPut);

setLayout(new BorderLayout()); //Main panel

add(ScreenPanel,BorderLayout.NORTH);

add(ButtonPanel,BorderLayout.CENTER);

add(ButtonPane2,BorderLayout.SOUTH);

}

class lsn implements ActionListener //listener

{

public void actionPerformed(ActionEvent e)

{

temp=scn.getText(); //save the numbers on screen first

if (flag)

{

temp= ""; //clear the numbers on the screen

flag=false;

}

if (e.getActionCommand()=="+" |e.getActionCommand()=="-"

|e.getActionCommand()=="*" |e.getActionCommand()=="/")

{ //if operation clicked

if (scn.getText().equals("") ) //等于时没有内容的处理 return;

num1=Float.parseFloat(scn.getText());

op=e.getActionCommand(); //operation type

scn.setText("");

}

else if (e.getActionCommand()=="=") //calculate

{

try{

if (scn.getText().equals("") ) //等于时没有内容的处理 return;

num2=Float.parseFloat(scn.getText());

if (op=="+")

num2=num1+num2;

else if (op=="-")

num2=num1-num2;

else if (op=="*")

num2=num1*num2;

else if (op=="/")

{

if(num2 < 0.0000001 & num2>0.00000001)

{

scn.setText("0不能做除数");

flag=true;

return;

}

num2=num1/num2;

}

scn.setText(String.valueOf(num2));

flag=true;

}

catch(ArithmeticException ex)

{

System.out.println(ex.toString());

}

}

else if (e.getActionCommand()=="清除") //clear

scn.setText("");

else //add to screen

scn.setText(temp+e.getActionCommand()); //setText

}

}

class keyInput extends KeyAdapter

{

public void keyPressed (KeyEvent k)

{

if ((k.getKeyCode()>47 & k.getKeyCode()<58) | (k.getKeyCode()>96 & k.getKeyCode()<112)

|k.getKeyCode()==10)

{

tempInKey=scn.getText(); //num1

keyDown=String.valueOf(k.getKeyChar()); //char to String

System.out.print(k.getKeyChar());

if (flag)

{

tempInKey= ""; //clear the numbers on the screen

flag=false;

}

if (k.getKeyChar()=='+'|k.getKeyChar()=='-'|k.getKeyChar()=='*'| k.getKeyChar()=='/')

{

if (scn.getText().equals("") ) //等于时没有内容的处理

return;

num1=Float.parseFloat(scn.getText());

opChar=k.getKeyChar();

scn.setText("");

}

else if (k.getKeyChar()=='='|k.getKeyCode()==10) //calculate

{

try{

System.out.println(opChar);

if (scn.getText().equals("") ) //等于时没有内容的处理 return;

num2=Float.parseFloat(scn.getText());

if (opChar=='+')

num2=num1+num2;

else if (opChar=='-')

num2=num1-num2;

else if (opChar=='*')

num2=num1*num2;

else if (opChar=='/')

{

if(num2 < 0.0000001 & num2>0.00000001)

{

scn.setText("0不能做除数");

flag=true;

return;

}

num2=num1/num2;

}

scn.setText(String.valueOf(num2));

flag=true;

}

catch(ArithmeticException ex)

{

System.out.println(ex.toString()); }

}

else

scn.setText(tempInKey+keyDown); //set }

else

return;

}

}

}

class CountFrame extends Frame //construct a frame

{

public CountFrame(String title)

{

super(title);

MainPanel t=new MainPanel(); //Main Panel

add(t); //add MainFrame

addWindowListener(new end()); //add listener

}

class end extends WindowAdapter //close the window,inner class {

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

}

class Count //main()

{

public static void main(String args[])

{

CountFrame frm=new CountFrame("JAVA计算器");

frm.setSize(220,180); //new frame,go above

frm.show();

}

}

第7题加事件处理:

//PhoneBook.java

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class PhoneBook extends MouseAdapter implements ActionListener {

JFrame mainFrm;

JTextField t1;

JTextField t2;

JList dataList;

String[] data;

String[] phone;

int now=-1;

void go()

{

mainFrm=new JFrame();

mainFrm.setTitle("电话簿程序");

mainFrm.setSize(400,200);

mainFrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

相关主题
文本预览
相关文档 最新文档