1、 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); // 设置默认关闭方式
2、关闭窗体的同时结束程序 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++
3、){ 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 j
4、ava.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+
5、){ 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.setDefaultC
6、loseOperation(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 s
7、tatic 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个标签
8、 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.Even
9、tQueue.invokeAndWait(new Runnable() { public void run() { initComponents(); } }); } catch (Exception ex) { ex.printStackTrace(); } } private void initComponents() { //声明8个组件 jLabel1 = new JLabel("输入圆的半径:", SwingConstants.CENTER); jLabel2 = new
10、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 JButto
11、n("退出"); //按钮添加监听器 jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jButton1ActionPerformed(evt); } }); //按钮添加监听器 jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) {
12、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(jBut
13、ton1); 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.value
14、Of(area)); return s; } //点击“计算”按钮jButton1触发的方法 private void jButton1ActionPerformed(ActionEvent evt) { //捕获单文本输入非数字的异常 try { String s = textOfRadius.getText();//获得单文本字符 double a = Double.valueOf(s).floatValue();//字符转化为双精度 jLabel3.setText(Round(a));//标签内容为周长 jLabe
15、l5.setText(Area(a));//标签内容为面积 } catch (NumberFormatException r) { //单文本为非数字弹出提示“输入错误”框 JOptionPane.showMessageDialog(this, "请输入数字类型", "输入错误",JOptionPane.WARNING_MESSAGE); textOfRadius.setText(""); } } //点击“退出”按钮jButton2触发的方法 public void jButton2ActionPerformed(ActionEve
16、nt 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,向其输入五个数,
17、然后以条形图(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{
18、 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)
19、{ 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) {
20、// 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 meth
21、od 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
22、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 Gue
23、ssNumber extends JFrame implements ActionListener { int numberOfRandom;// 游戏程序随机数 int numberOfUser;// 玩家输入整数 JLabel label1;// 标签1:“输入一个1到100之间的整数” JLabel label2;// 标签2:“提示” JLabel label3;// 标签3:提示的内容(偏大、偏小、正确) JButton buttonOfSure;// 确定按钮 JButton buttonOfExit;// 退出按钮 JTextField jText
24、Field;// 猜数输入单行文本框 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(); numberOfRando
25、m = random.nextInt(100); // 各组件的定义 label1 = new JLabel("请输入一个1到100之间的整数:"); label2 = new JLabel("提示:", SwingConstants.CENTER); label3 = new JLabel("猜猜看"); buttonOfSure = new JButton("确定"); this.getRootPane().setDefaultButton(buttonOfSure);// 默认用户按下回车键触发“确定”按钮 buttonOfSure.addAct
26、ionListener(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); // 显示窗
27、体 this.setVisible(true); System.out.println(numberOfRandom);// 偷偷看看随机数,哈哈 } // 事件处理 public void eventHandle() { //捕获非整型输入异常 try { numberOfUser = Integer.parseInt(jTextField.getText());//获得用户输入数 if (numberOfUser < 1 || numberOfUser > 100) { JOptionPane.showMessage
28、Dialog(this, "请输入1到100之间的整数"); } else { if (numberOfUser > numberOfRandom) { label3.setText("偏大"); jTextField.requestFocus();//清空文本框并使重新获得焦点 } if (numberOfUser < numberOfRandom) { label3.setText("偏小"); jTextField.requestFocus(); } if (numberOfUser
29、 == numberOfRandom) { label3.setText("恭喜你,答对了。"); jTextField.requestFocus(); } } } catch (NumberFormatException e) { JOptionPane.showMessageDialog(this, "请输入整数", "输入错误", JOptionPane.WARNING_MESSAGE); jTextField.requestFocus(); } } //按钮触发选择 pub
30、lic 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。使
31、用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 jav
32、ax.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 jPa
33、nel;//左边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 jFra
34、me = 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 = n
35、ew 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(
36、picture); // 定义滚动框,总是显示滚动条 jscrollPane = new JScrollPane(label, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); // 将左右两边的中间容器放弃JFrame中 pane.add(jPanel, BorderLayout.WEST); pane.add(jscrollPane, BorderLayout.EAST); //排版显
37、示 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);//
38、垂直不显示 jscrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//水平不显示 whetherCroll = false; } else { jscrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//垂直显示 jscrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_S
39、CROLLBAR_ALWAYS);//水平显示 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[] arg
40、s) { 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
41、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
42、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.addE
43、lement("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(thi
44、s); 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.locationToInd
45、ex(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); } } @O
46、verride 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
47、} @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
48、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 impl
49、ements 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.s
50、etLayout(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);// 添加Ite
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818