文档库 最新最全的文档下载
当前位置:文档库 › Java语言程序的设计(郑莉)第九章课后习题答案

Java语言程序的设计(郑莉)第九章课后习题答案

Java语言程序设计

第九章课后习题答案

1.编写一个程序,该程序绘制一个5×9的网络,使用drawLine方法。//NetWork类

import java.awt.Graphics;

import javax.swing.JFrame;

public class NetWork extends JFrame{

public NetWork(){

// 设置窗体大小

this.setSize(130, 130);

//设置窗体大小不可改变

this.setResizable(false);

// 设置默认关闭方式,关闭窗体的同时结束程序

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 将窗体显示出来

this.setVisible(true);

}

//横纵格之间都间隔10像素,起点在(20,40)

public void paint(Graphics g){

//绘制横向线

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

g.drawLine(20, 40+i*10, 110, 40+i*10);

}

//绘制纵向线

for(int i=0;i<=9;i++){

g.drawLine(20+i*10, 40, 20+i*10, 90);

}

}

}

//test9_1类

public class test9_1 {

public static void main(String[] args){

new NetWork();

}

}

运行结果:

2.编写一个程序,该程序以不同的颜色随机产生三角形,每个三角形用不同的颜色进行填充。//Triangle类

import java.awt.Color;

import java.awt.Graphics;

import java.util.Random;

import javax.swing.JFrame;

public class Triangle extends JFrame{

Random rnd = new Random();

//这里定义4个三角形

int[][] x=new int[4][3];

int[][] y=new int[4][3];

int[][] color=new int[4][3];

public Triangle(){

for(int i=0;i<4;i++){

for(int j=0;j<3;j++){

color[i][j]=rnd.nextInt(255);

x[i][j]=rnd.nextInt(i*100+100);

y[i][j]=rnd.nextInt(i*100+100)+50;//加50像素是为了避免顶到窗体上沿}

}

//窗体标题

this.setTitle("随机三角形");

//窗体大小

this.setSize(500,500);

//窗体大小不可变

this.setResizable(false);

//关闭窗体的同时结束程序

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//显示窗体

this.setVisible(true);

}

public void paint(Graphics g){

for(int i=0;i<4;i++){

g.setColor(new Color(color[i][0],color[i][1],color[i][2]));

g.fillPolygon(x[i], y[i], 3);

}

}

}

//test9_2

public class test9_2 {

public static void main(String[] args){

new Triangle();

}

}

运行结果:

3.编写一个Applet,该程序请求用户输入圆的半径,然后显示该圆的直径、周长和面积。

//test9_3

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class test9_3 extends JApplet {

//声明5个标签

private JLabel jLabel1;

private JLabel jLabel2;

private JLabel jLabel3;

private JLabel jLabel4;

private JLabel jLabel5;

//1个单行文本

private JTextField textOfRadius;

//2个按钮

private JButton jButton1;

private JButton jButton2;

//初始化

public void init() {

try {

java.awt.EventQueue.invokeAndWait(new Runnable() {

public void run() {

initComponents();

}

});

} catch (Exception ex) {

ex.printStackTrace();

}

}

private void initComponents() {

//声明8个组件

jLabel1 = new JLabel("输入圆的半径:", SwingConstants.CENTER);

jLabel2 = new JLabel("圆的周长:", SwingConstants.CENTER);

jLabel3 = new JLabel("", SwingConstants.CENTER);

jLabel4 = new JLabel("圆的面积:", SwingConstants.CENTER);

jLabel5 = new JLabel("", SwingConstants.CENTER);

textOfRadius = new JTextField("半径");

jButton1 = new JButton("计算");

jButton2 = new JButton("退出");

//按钮添加监听器

jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jButton1ActionPerformed(evt);

}

});

//按钮添加监听器

jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jButton2ActionPerformed(evt);

}

});

//声明定义内容面板,并且设置其布局格式为:4行2列格子Container c = getContentPane();

c.setLayout(new GridLayout(4, 2));

//将8个组件加入到内容面板

c.add(jLabel1);

c.add(textOfRadius);

c.add(jLabel2);

c.add(jLabel3);

c.add(jLabel4);

c.add(jLabel5);

c.add(jButton1);

c.add(jButton2);

}

// 求周长方法

private String Round(double a) {

double perimeter = a * 2 * 3.14;

String s = new String(String.valueOf(perimeter));

return s;

}

// 求面积方法

private String Area(double a) {

double area = a * a * 3.14;

String s = new String(String.valueOf(area));

return s;

}

//点击“计算”按钮jButton1触发的方法

private void jButton1ActionPerformed(ActionEvent evt) {

//捕获单文本输入非数字的异常

try {

String s = textOfRadius.getText();//获得单文本字符

double a = Double.valueOf(s).floatValue();//字符转化为双精度

jLabel3.setText(Round(a));//标签内容为周长

jLabel5.setText(Area(a));//标签内容为面积

} catch (NumberFormatException r) {

//单文本为非数字弹出提示“输入错误”框

JOptionPane.showMessageDialog(this, "请输入数字类型", "输入错误",JOptionPane.WARNING_MESSAGE);

textOfRadius.setText("");

}

}

//点击“退出”按钮jButton2触发的方法

public void jButton2ActionPerformed(ActionEvent evt) {

System.exit(0);

}

}

运行结果:

编译text9_3.java产生字节码文件test9_3.class,接下来需要编写一个HTML文件text9_3.html来嵌入text9_3.class,代码如下:

将test9_3.html文件和test9_3.class文件放在同一个目录下,在浏览器中打开这个test9_3.html文件,实现的效果如下:

4.编写一个Applet,向其输入五个数,然后以条形图(bar graph)的形式来表示这些数。

5.编写一个绘制圆形的程序,当鼠标在绘制区域中单击时,该正方形的左上角顶点应准确的跟随鼠标光标移动,重绘该圆形。

//MyJFrame类

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JFrame;

public class MyJFrame extends JFrame implements MouseListener{

int x=50;

int y=50;

int radius=50;

public MyJFrame(){

this.setTitle("绘制圆形");

this.setSize(200,200);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.addMouseListener(this);

this.setVisible(true);

}

public void paint(Graphics g){

g.drawOval(x, y, radius, radius);

}

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

this.x=e.getX();

this.y=e.getY();

this.repaint();

System.out.println("x: " + e.getX() + "\ny: " + e.getY()); }

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

}

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}

}

//test9_5

public class test9_3 {

public static void main(String[] args){

new MyJFrame();

}

}

运行结果:

6.编写一个“猜数”程序:该程序随机在1到100的范围内选择一个供用户猜测的整数,然后改程序显示提示信息,要求用户输入一个1到100之间的整数,根据输入偏大、偏小、正确,程序将显示不同的图标。

//GuessNumber类

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Random;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

import javax.swing.SwingConstants;

public class GuessNumber extends JFrame implements ActionListener { int numberOfRandom;// 游戏程序随机数

int numberOfUser;// 玩家输入整数

JLabel label1;// 标签1:“输入一个1到100之间的整数”

JLabel label2;// 标签2:“提示”

JLabel label3;// 标签3:提示的内容(偏大、偏小、正确)

JButton buttonOfSure;// 确定按钮

JButton buttonOfExit;// 退出按钮

JTextField jTextField;// 猜数输入单行文本框

public void init() {

// 窗体的定义

this.setTitle("这是一个猜数游戏");

this.setSize(400, 120);

this.setResizable(false);

this.setLayout(new GridLayout(3, 2));

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// 随机数

Random random = new Random();

numberOfRandom = random.nextInt(100);

// 各组件的定义

label1 = new JLabel("请输入一个1到100之间的整数:");

label2 = new JLabel("提示:", SwingConstants.CENTER);

label3 = new JLabel("猜猜看");

buttonOfSure = new JButton("确定");

this.getRootPane().setDefaultButton(buttonOfSure);// 默认用户按下回车键触发“确定”按钮

buttonOfSure.addActionListener(this);

buttonOfExit = new JButton("退出");

buttonOfExit.addActionListener(this);

jTextField = new JTextField("输入");

// 窗体加入各组件

this.add(label1);

this.add(jTextField);

this.add(label2);

this.add(label3);

this.add(buttonOfSure);

this.add(buttonOfExit);

// 显示窗体

this.setVisible(true);

System.out.println(numberOfRandom);// 偷偷看看随机数,哈哈}

// 事件处理

public void eventHandle() {

//捕获非整型输入异常

try {

numberOfUser = Integer.parseInt(jTextField.getText());//获得用户输入数

if (numberOfUser < 1 || numberOfUser > 100) {

JOptionPane.showMessageDialog(this, "请输入1到100之间的整数");

} else {

if (numberOfUser > numberOfRandom) {

label3.setText("偏大");

jTextField.requestFocus();//清空文本框并使重新获得焦点

}

if (numberOfUser < numberOfRandom) {

label3.setText("偏小");

jTextField.requestFocus();

}

if (numberOfUser == numberOfRandom) {

label3.setText("恭喜你,答对了。");

jTextField.requestFocus();

}

}

} catch (NumberFormatException e) {

JOptionPane.showMessageDialog(this, "请输入整数", "输入错误",

JOptionPane.WARNING_MESSAGE);

jTextField.requestFocus();

}

}

//按钮触发选择

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand() == "确定") {

this.eventHandle();

}

if (e.getActionCommand() == "退出") {

System.exit(0);

}

}

public static void main(String[] args) {

new GuessNumber().init();

}

}

运行结果:

7.练习使用JscrollPane。使用BorderLayout将JFrame布局分为左右两块;左边又使用GridLayout,包含三个按钮,右边在JLabel里显示一幅图画,按钮控制JLabel是否显示滚动条。

//test9_7

import java.awt.BorderLayout;

import java.awt.Button;

import java.awt.Container;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.ScrollPaneConstants;

public class test9_7 extends JFrame implements ActionListener {

private JPanel jPanel;//左边panel框

private Button button1;

private Button button2;

private Button button3;

private JScrollPane jscrollPane;//右边滚动框

private JLabel label;//滚动框中的标签

public ImageIcon picture = null;//标签中的图标

public boolean whetherCroll = true;//用于切换滚动条的显示

public void init() {

JFrame jFrame = new JFrame("练习使用JscrollPane");

Container pane = jFrame.getContentPane();

this.setDefaultCloseOperation((JFrame.EXIT_ON_CLOSE));

// 定义左边镶板JPanel框和三个按钮

jPanel = new JPanel(new GridLayout(3, 1, 0, 30));

button1 = new Button("滚动");

button1.addActionListener(this);

button2 = new Button("试试");

button2.addActionListener(this);

button3 = new Button("退出");

button3.addActionListener(this);

jPanel.add(button1);

jPanel.add(button2);

jPanel.add(button3);

// 读取图片作为图标

picture = new ImageIcon("D:/image/fuck.jpg/");

// 将图标赋给标签label

label = new JLabel(picture);

// 定义滚动框,总是显示滚动条

jscrollPane = new JScrollPane(label,

ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,

ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

// 将左右两边的中间容器放弃JFrame中

pane.add(jPanel, BorderLayout.WEST);

pane.add(jscrollPane, BorderLayout.EAST);

//排版显示

jFrame.pack();

jFrame.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if (e.getActionCommand() == "滚动") {

if (whetherCroll) {

jscrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);/ /垂直不显示

jscrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVE R);//水平不显示

whetherCroll = false;

} else {

jscrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //垂直显示

jscrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWA YS);//水平显示

whetherCroll = true;

}

}

if (e.getActionCommand() == "试试") {

JOptionPane.showMessageDialog(this,

"oh,,,Fuck your teacher? yeal……good!");

}

if (e.getActionCommand() == "退出") {

System.exit(0);

}

}

public static void main(String[] args) {

new test9_7().init();

}

}

运行结果:

显示滚动条

点击“滚动”按钮后,没显示滚动条

8.练习使用JList。建立两个JList,双击其中任何一个中的某一项,此项就会跑到另外一个JList中。

//test9_8

import java.awt.Container;

import java.awt.GridLayout;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.DefaultListModel;

import javax.swing.JFrame;

import javax.swing.JList;

public class test9_8 extends JFrame implements MouseListener {

public JFrame jFrame;

public JList jList1;

public JList jList2;

public DefaultListModel listModel1;

public DefaultListModel listModel2;

public void init() {

JFrame jFrame = new JFrame("练习使用List");

Container pane = jFrame.getContentPane();

pane.setLayout(new GridLayout(1,2));

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

listModel1 = new DefaultListModel();

listModel1.addElement("First");

listModel1.addElement("Second");

listModel1.addElement("Third");

listModel2=new DefaultListModel();

listModel2.addElement("one");

listModel2.addElement("two");

listModel2.addElement("three");

jList1 = new JList(listModel1);

jList2=new JList(listModel2);

jList1.addMouseListener(this);

jList2.addMouseListener(this);

pane.add(jList1);

pane.add(jList2);

jFrame.pack();

jFrame.setVisible(true);

}

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

if(e.getSource() == jList1){

int index = jList1.locationToIndex(e.getPoint());

Object o = jList1.getModel().getElementAt(index);

listModel2.addElement(o);

}

if(e.getSource()==jList2){

int index = jList2.locationToIndex(e.getPoint());

Object o = jList2.getModel().getElementAt(index);

listModel1.addElement(o);

}

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

public static void main(String[] args) {

new test9_8().init();

}

}

运行结果:

9.练习使用JComboBox。包括一个JLable、一个JComboBox,可以通过输入或者选择JComboBox 中的某一项来控制JLable中文字的大小。

//test9_9

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

public class test9_9 extends JFrame implements ItemListener {

public JFrame jFrame;

private JLabel jLabel;

private JComboBox jComboBox;

private String[] fontSize = { "8", "14", "20", "28", "32", "40" };

public void init() {

jFrame = new JFrame("练习ComboBox");

Container container = jFrame.getContentPane();

container.setLayout(new GridLayout(2, 1));

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jLabel = new JLabel("你好吗?");

jLabel.setFont(new Font("", 0, 10));// 设置字体大小

jComboBox = new JComboBox(fontSize);

jComboBox.setEditable(true);// 设置复选框可以输入

jComboBox.addItemListener(this);// 添加ItemListener监听

// 添加两个组件

container.add(jLabel);

container.add(jComboBox);

jFrame.pack();// 排版

jFrame.setVisible(true);// 显示

}

public void itemStateChanged(ItemEvent e) {

//使用这个判断的目的的是为了避免触发事件总是执行两次的问题

if (e.getStateChange() == ItemEvent.SELECTED) {

try {

String s = jComboBox.getSelectedItem().toString();

int intFontSize = Integer.parseInt(s);

jLabel.setFont(new Font("", 0, intFontSize));

// System.out.println(intFontSize);

} catch (NumberFormatException r) {

JOptionPane.showMessageDialog(this, "请输入整数");

}

}

}

public static void main(String[] args) {

new test9_9().init();

}

}

运行结果:

10.练习使用JTable。包括姓名、学号、语文成绩、数学成绩、总分五项,单击总分会自动将语文数学成绩相加。

import java.awt.event.*;

import javax.swing.*;

import javax.swing.table.*;

public class Test9_10 extends JFrame implements MouseListener {

private JTable jTable;

private Object[][] cellData = { { "姓名", new String("林楚金") },

{ "学号", new String("200905") }, { "语文成绩", new String("86") },

{ "数学成绩", new String("96") }, { "总分", new String("点击出总分") } };

private String[] columnNames = { "col1", "col2" };

public Test9_10() {

DefaultTableModel model = new DefaultTableModel(cellData, columnNames) { public boolean isCellEditable(int row, int column) {

return false;

}

};

jTable = new JTable(model);

jTable.addMouseListener(this);

this.add(jTable);

this.setTitle("表格演示");

this.setSize(300, 350);

this.setLocation(200, 200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

public void mouseClicked(MouseEvent e) {

DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();

int row = jTable.getSelectedRow();

int column = jTable.getSelectedColumn();

if(row==4 && column==1){

相关文档
相关文档 最新文档