王之泰201771010131《面向对象程序设计(java)》第十五周学习总结

第一部分:理论知识学习部分

第13 章 部署应用程序

1.jar文件

a) java 程序的打包:编译完成后,员 将.class 文件压缩打包为 .jar 文件后, GUI 界面 程序就可以直接双击图标运行。
b) jar .jar文件( Java 归档)既可 以包含类文件,也归档)既可 以包含类文件,也以包含诸如图像和声音这些其它类型的文件。 以包含诸如图像和声音这些其它类型的文件。 以包含诸如图像和声音这些其它类型的文件。 以包含诸如图像和声音这些其它类型的文件。
c) JAR 文件是压缩的,它使用 ZIP 压缩格式。 压缩格式。 压缩格式。 压缩格式。 压缩格式

1) jar命令

a)jar命令格式:

jar {ctxu} [vfm0Me] jar-file] [manifest file]  [entry -point] [-C dir ] files ...

2)运行 JAR 文件

a) 用户可以通过下面的命令来启动应程序:

java –jar MyProgram.jar

b) 窗口操作系统,可通过双击 JAR 文件图标来启动应用程序。

3) 资源

a) Java 中,应用程序使的类通常需要一些相关数 中,应用程序使的类通常需要一些相关数 据文件,这些称为资源 (Resource) 。
–图像和声音文件。
–带有消息字符串和按钮标签的文本件。 带有消息字符串和按钮标签的文本件。 带有消息字符串和按钮标签的文本件。
–二进制数据文件,如:描述地图布局的。 二进制数据文件,如:描述地图布局的。 二进制数据文件,如:描述地图布局的。

2.应用程序首选项存储

3.Java web start

第二部分:实验部分——GUI编程练习与应用程序部署

实验时间 2018-12-6

1、实验目的与要求

(1) 掌握Java应用程序的打包操作;

(2) 了解应用程序存储配置信息的两种方法;

(3) 掌握基于JNLP协议的java Web Start应用程序的发布方法;

(5) 掌握Java GUI 编程技术。

2、实验内容和步骤

实验1: 导入第13章示例程序,测试程序并进行代码注释。

测试程序1

1.在elipse IDE中调试运行教材585页程序13-1,结合程序运行结果理解程序;

2.将所生成的JAR文件移到另外一个不同的目录中,再运行该归档文件,以便确认程序是从JAR文件中,而不是从当前目录中读取的资源。

3.掌握创建JAR文件的方法;

 1 package resource;
 2
 3 import java.awt.*;
 4 import java.io.*;
 5 import java.net.*;
 6 import java.util.*;
 7 import javax.swing.*;
 8
 9 /**
10  * @version 1.41 2015-06-12
11  * @author Cay Horstmann
12  */
13 public class ResourceTest
14 {
15    public static void main(String[] args)
16    {
17       EventQueue.invokeLater(() -> {
18          JFrame frame = new ResourceTestFrame();
19          frame.setTitle("ResourceTest");
20          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
21          frame.setVisible(true);
22       });
23    }
24 }
25
26 /**
27  * 一个加载图像和文本资源的框架。
28  */
29 class ResourceTestFrame extends JFrame
30 {
31    private static final int DEFAULT_WIDTH = 300;
32    private static final int DEFAULT_HEIGHT = 300;
33
34    public ResourceTestFrame()
35    {
36       setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
37       URL aboutURL = getClass().getResource("about.gif");
38       Image img = new ImageIcon(aboutURL).getImage();
39       setIconImage(img);
40
41       JTextArea textArea = new JTextArea();
42       InputStream stream = getClass().getResourceAsStream("about.txt");
43       try (Scanner in = new Scanner(stream, "UTF-8"))
44       {
45          while (in.hasNext())
46             textArea.append(in.nextLine() + "\n");
47       }
48       add(textArea);
49    }
50 }

测试程序2

1.在elipse IDE中调试运行教材583页-584程序13-2,结合程序运行结果理解程序;

2.了解Properties类中常用的方法;

  1 package properties;
  2
  3 import java.awt.EventQueue;
  4 import java.awt.event.*;
  5 import java.io.*;
  6 import java.util.Properties;
  7
  8 import javax.swing.*;
  9
 10 /**
 11  * 一个测试属性的程序。 程序记住帧的位置、大小和标题
 12  * @version 1.01 2015-06-16
 13  * @author Cay Horstmann
 14  */
 15 public class PropertiesTest
 16 {
 17    public static void main(String[] args)
 18    {
 19       EventQueue.invokeLater(() -> {
 20          PropertiesFrame frame = new PropertiesFrame();
 21          frame.setVisible(true);
 22       });
 23    }
 24 }
 25
 26 /**
 27  * 从属性文件和更新恢复位置和大小的框架。退出时的属性。
 28  */
 29 class PropertiesFrame extends JFrame
 30 {
 31    private static final int DEFAULT_WIDTH = 300;
 32    private static final int DEFAULT_HEIGHT = 200;
 33
 34    private File propertiesFile;
 35    private Properties settings;
 36
 37    public PropertiesFrame()
 38    {
 39       // 从属性获取位置、大小、标题
 40
 41       String userDir = System.getProperty("user.home");
 42       File propertiesDir = new File(userDir, ".corejava");
 43       if (!propertiesDir.exists()) propertiesDir.mkdir();
 44       propertiesFile = new File(propertiesDir, "program.properties");
 45
 46       Properties defaultSettings = new Properties();
 47       defaultSettings.setProperty("left", "0");
 48       defaultSettings.setProperty("top", "0");
 49       defaultSettings.setProperty("width", "" + DEFAULT_WIDTH);
 50       defaultSettings.setProperty("height", "" + DEFAULT_HEIGHT);
 51       defaultSettings.setProperty("title", "");
 52
 53       settings = new Properties(defaultSettings);
 54
 55       if (propertiesFile.exists())
 56          try (InputStream in = new FileInputStream(propertiesFile))
 57          {
 58             settings.load(in);
 59          }
 60          catch (IOException ex)
 61          {
 62             ex.printStackTrace();
 63          }
 64
 65       int left = Integer.parseInt(settings.getProperty("left"));
 66       int top = Integer.parseInt(settings.getProperty("top"));
 67       int width = Integer.parseInt(settings.getProperty("width"));
 68       int height = Integer.parseInt(settings.getProperty("height"));
 69       setBounds(left, top, width, height);
 70
 71       // 如果没有标题,请询问用户
 72
 73       String title = settings.getProperty("title");
 74       if (title.equals(""))
 75          title = JOptionPane.showInputDialog("Please supply a frame title:");
 76       if (title == null) title = "";
 77       setTitle(title);
 78
 79       addWindowListener(new WindowAdapter()
 80       {
 81          public void windowClosing(WindowEvent event)
 82          {
 83             settings.setProperty("left", "" + getX());
 84             settings.setProperty("top", "" + getY());
 85             settings.setProperty("width", "" + getWidth());
 86             settings.setProperty("height", "" + getHeight());
 87             settings.setProperty("title", getTitle());
 88             try (OutputStream out = new FileOutputStream(propertiesFile))
 89             {
 90                settings.store(out, "Program Properties");
 91             }
 92             catch (IOException ex)
 93             {
 94                ex.printStackTrace();
 95             }
 96             System.exit(0);
 97          }
 98       });
 99    }
100 }

测试程序3

1.在elipse IDE中调试运行教材593页-594程序13-3,结合程序运行结果理解程序;

2.了解Preferences类中常用的方法;

  1 package preferences;
  2
  3 import java.awt.*;
  4 import java.io.*;
  5 import java.util.prefs.*;
  6
  7 import javax.swing.*;
  8 import javax.swing.filechooser.*;
  9
 10 /**
 11  * 一个测试偏好设置的程序。程序记住框架。位置、大小和标题。
 12  * @version 1.03 2015-06-12
 13  * @author Cay Horstmann
 14  */
 15 public class PreferencesTest
 16 {
 17    public static void main(String[] args)
 18    {
 19       EventQueue.invokeLater(() -> {
 20          PreferencesFrame frame = new PreferencesFrame();
 21          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 22          frame.setVisible(true);
 23       });
 24    }
 25 }
 26
 27 /**
 28  * 从用户偏好恢复位置和大小并在退出时更新首选项的框架。
 29  */
 30 class PreferencesFrame extends JFrame
 31 {
 32    private static final int DEFAULT_WIDTH = 300;
 33    private static final int DEFAULT_HEIGHT = 200;
 34    private Preferences root = Preferences.userRoot();
 35    private Preferences node = root.node("/com/horstmann/corejava");
 36
 37    public PreferencesFrame()
 38    {
 39       // 从偏好获得位置、大小、标题
 40
 41       int left = node.getInt("left", 0);
 42       int top = node.getInt("top", 0);
 43       int width = node.getInt("width", DEFAULT_WIDTH);
 44       int height = node.getInt("height", DEFAULT_HEIGHT);
 45       setBounds(left, top, width, height);
 46
 47       // 如果没有标题,请询问用户
 48
 49       String title = node.get("title", "");
 50       if (title.equals(""))
 51          title = JOptionPane.showInputDialog("Please supply a frame title:");
 52       if (title == null) title = "";
 53       setTitle(title);
 54
 55       // 设置显示XML文件的文件选择器
 56
 57       final JFileChooser chooser = new JFileChooser();
 58       chooser.setCurrentDirectory(new File("."));
 59       chooser.setFileFilter(new FileNameExtensionFilter("XML files", "xml"));
 60
 61       // 设置菜单
 62
 63       JMenuBar menuBar = new JMenuBar();
 64       setJMenuBar(menuBar);
 65       JMenu menu = new JMenu("File");
 66       menuBar.add(menu);
 67
 68       JMenuItem exportItem = new JMenuItem("Export preferences");
 69       menu.add(exportItem);
 70       exportItem
 71             .addActionListener(event -> {
 72                if (chooser.showSaveDialog(PreferencesFrame.this) == JFileChooser.APPROVE_OPTION)
 73                {
 74                   try
 75                   {
 76                      savePreferences();
 77                      OutputStream out = new FileOutputStream(chooser
 78                            .getSelectedFile());
 79                      node.exportSubtree(out);
 80                      out.close();
 81                   }
 82                   catch (Exception e)
 83                   {
 84                      e.printStackTrace();
 85                   }
 86                }
 87             });
 88
 89       JMenuItem importItem = new JMenuItem("Import preferences");
 90       menu.add(importItem);
 91       importItem
 92             .addActionListener(event -> {
 93                if (chooser.showOpenDialog(PreferencesFrame.this) == JFileChooser.APPROVE_OPTION)
 94                {
 95                   try
 96                   {
 97                      InputStream in = new FileInputStream(chooser
 98                            .getSelectedFile());
 99                      Preferences.importPreferences(in);
100                      in.close();
101                   }
102                   catch (Exception e)
103                   {
104                      e.printStackTrace();
105                   }
106                }
107             });
108
109       JMenuItem exitItem = new JMenuItem("Exit");
110       menu.add(exitItem);
111       exitItem.addActionListener(event -> {
112          savePreferences();
113          System.exit(0);
114       });
115    }
116
117    public void savePreferences()
118    {
119       node.putInt("left", getX());
120       node.putInt("top", getY());
121       node.putInt("width", getWidth());
122       node.putInt("height", getHeight());
123       node.put("title", getTitle());
124    }
125 }

测试程序4

1.在elipse IDE中调试运行教材619页-622程序13-6,结合程序运行结果理解程序;

2.掌握基于JNLP协议的java Web Start应用程序的发布方法。

 1 package webstart;
 2
 3 import java.awt.*;
 4 import javax.swing.*;
 5
 6 /**
 7  * 具有可作为Java Web启动应用程序部署的计算历史的计算器。
 8  * @version 1.04 2015-06-12
 9  * @author Cay Horstmann
10  */
11 public class Calculator
12 {
13    public static void main(String[] args)
14    {
15       EventQueue.invokeLater(() ->             {
16                CalculatorFrame frame = new CalculatorFrame();
17                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18                frame.setVisible(true);
19          });
20    }
21 }
  1 package webstart;
  2
  3 import java.io.BufferedReader;
  4 import java.io.ByteArrayInputStream;
  5 import java.io.ByteArrayOutputStream;
  6 import java.io.FileNotFoundException;
  7 import java.io.IOException;
  8 import java.io.InputStream;
  9 import java.io.InputStreamReader;
 10 import java.io.OutputStream;
 11 import java.io.PrintStream;
 12 import java.net.MalformedURLException;
 13 import java.net.URL;
 14
 15 import javax.jnlp.BasicService;
 16 import javax.jnlp.FileContents;
 17 import javax.jnlp.FileOpenService;
 18 import javax.jnlp.FileSaveService;
 19 import javax.jnlp.PersistenceService;
 20 import javax.jnlp.ServiceManager;
 21 import javax.jnlp.UnavailableServiceException;
 22 import javax.swing.JFrame;
 23 import javax.swing.JMenu;
 24 import javax.swing.JMenuBar;
 25 import javax.swing.JMenuItem;
 26 import javax.swing.JOptionPane;
 27
 28 /**
 29  * 一个带有计算器面板和菜单的框架,用来载入和保存计算器历史。
 30  */
 31 public class CalculatorFrame extends JFrame
 32 {
 33    private CalculatorPanel panel;
 34
 35    public CalculatorFrame()
 36    {
 37       setTitle();
 38       panel = new CalculatorPanel();
 39       add(panel);
 40
 41       JMenu fileMenu = new JMenu("File");
 42       JMenuBar menuBar = new JMenuBar();
 43       menuBar.add(fileMenu);
 44       setJMenuBar(menuBar);
 45
 46       JMenuItem openItem = fileMenu.add("Open");
 47       openItem.addActionListener(event -> open());
 48       JMenuItem saveItem = fileMenu.add("Save");
 49       saveItem.addActionListener(event -> save());
 50
 51       pack();
 52    }
 53
 54    /**
 55     * 从持久存储中获取标题,或者在没有以前的条目的情况下向用户请求标题。
 56     */
 57    public void setTitle()
 58    {
 59       try
 60       {
 61          String title = null;
 62
 63          BasicService basic = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
 64          URL codeBase = basic.getCodeBase();
 65
 66          PersistenceService service = (PersistenceService) ServiceManager
 67                .lookup("javax.jnlp.PersistenceService");
 68          URL key = new URL(codeBase, "title");
 69
 70          try
 71          {
 72             FileContents contents = service.get(key);
 73             InputStream in = contents.getInputStream();
 74             BufferedReader reader = new BufferedReader(new InputStreamReader(in));
 75             title = reader.readLine();
 76          }
 77          catch (FileNotFoundException e)
 78          {
 79             title = JOptionPane.showInputDialog("Please supply a frame title:");
 80             if (title == null) return;
 81
 82             service.create(key, 100);
 83             FileContents contents = service.get(key);
 84             OutputStream out = contents.getOutputStream(true);
 85             PrintStream printOut = new PrintStream(out);
 86             printOut.print(title);
 87          }
 88          setTitle(title);
 89       }
 90       catch (UnavailableServiceException | IOException e)
 91       {
 92          JOptionPane.showMessageDialog(this, e);
 93       }
 94    }
 95
 96    /**
 97     * 打开历史文件并更新显示。
 98     */
 99    public void open()
100    {
101       try
102       {
103          FileOpenService service = (FileOpenService) ServiceManager
104                .lookup("javax.jnlp.FileOpenService");
105          FileContents contents = service.openFileDialog(".", new String[] { "txt" });
106
107          JOptionPane.showMessageDialog(this, contents.getName());
108          if (contents != null)
109          {
110             InputStream in = contents.getInputStream();
111             BufferedReader reader = new BufferedReader(new InputStreamReader(in));
112             String line;
113             while ((line = reader.readLine()) != null)
114             {
115                panel.append(line);
116                panel.append("\n");
117             }
118          }
119       }
120       catch (UnavailableServiceException e)
121       {
122          JOptionPane.showMessageDialog(this, e);
123       }
124       catch (IOException e)
125       {
126          JOptionPane.showMessageDialog(this, e);
127       }
128    }
129
130    /**
131     * 将计算器历史保存到文件中。
132     */
133    public void save()
134    {
135       try
136       {
137          ByteArrayOutputStream out = new ByteArrayOutputStream();
138          PrintStream printOut = new PrintStream(out);
139          printOut.print(panel.getText());
140          InputStream data = new ByteArrayInputStream(out.toByteArray());
141          FileSaveService service = (FileSaveService) ServiceManager
142                .lookup("javax.jnlp.FileSaveService");
143          service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt");
144       }
145       catch (UnavailableServiceException e)
146       {
147          JOptionPane.showMessageDialog(this, e);
148       }
149       catch (IOException e)
150       {
151          JOptionPane.showMessageDialog(this, e);
152       }
153    }
154 }
  1 package webstart;
  2
  3 import java.awt.*;
  4 import java.awt.event.*;
  5 import javax.swing.*;
  6 import javax.swing.text.*;
  7
  8 /**
  9    具有计算器按钮和结果显示的面板。
 10 */
 11 public class CalculatorPanel extends JPanel
 12 {
 13    private JTextArea display;
 14    private JPanel panel;
 15    private double result;
 16    private String lastCommand;
 17    private boolean start;
 18
 19    /**
 20       列出面板。
 21    */
 22    public CalculatorPanel()
 23    {
 24       setLayout(new BorderLayout());
 25
 26       result = 0;
 27       lastCommand = "=";
 28       start = true;
 29
 30       // 添加显示
 31       display = new JTextArea(10, 20);
 32
 33       add(new JScrollPane(display), BorderLayout.NORTH);
 34
 35       ActionListener insert = new InsertAction();
 36       ActionListener command = new CommandAction();
 37
 38       // 在4×4网格中添加按钮
 39
 40       panel = new JPanel();
 41       panel.setLayout(new GridLayout(4, 4));
 42
 43       addButton("7", insert);
 44       addButton("8", insert);
 45       addButton("9", insert);
 46       addButton("/", command);
 47
 48       addButton("4", insert);
 49       addButton("5", insert);
 50       addButton("6", insert);
 51       addButton("*", command);
 52
 53       addButton("1", insert);
 54       addButton("2", insert);
 55       addButton("3", insert);
 56       addButton("-", command);
 57
 58       addButton("0", insert);
 59       addButton(".", insert);
 60       addButton("=", command);
 61       addButton("+", command);
 62
 63       add(panel, BorderLayout.CENTER);
 64    }
 65
 66    /**
 67       获取历史文本。
 68       @return the calculator history
 69    */
 70    public String getText()
 71    {
 72       return display.getText();
 73    }
 74
 75    /**
 76       将字符串追加到历史文本中。
 77       @param s the string to append
 78    */
 79    public void append(String s)
 80    {
 81       display.append(s);
 82    }
 83
 84    /**
 85       向中心面板添加一个按钮。
 86       @param label the button label
 87       @param listener the button listener
 88    */
 89    private void addButton(String label, ActionListener listener)
 90    {
 91       JButton button = new JButton(label);
 92       button.addActionListener(listener);
 93       panel.add(button);
 94    }
 95
 96    /**
 97       此操作将按钮操作字符串插入到显示文本结束。
 98    */
 99    private class InsertAction implements ActionListener
100    {
101       public void actionPerformed(ActionEvent event)
102       {
103          String input = event.getActionCommand();
104          start = false;
105          display.append(input);
106       }
107    }
108
109    /**
110       此操作执行按钮的命令。动作字符串表示。
111    */
112    private class CommandAction implements ActionListener
113    {
114       public void actionPerformed(ActionEvent event)
115       {
116          String command = event.getActionCommand();
117
118          if (start)
119          {
120             if (command.equals("-"))
121             {
122                display.append(command);
123                start = false;
124             }
125             else
126                lastCommand = command;
127          }
128          else
129          {
130             try
131             {
132                int lines = display.getLineCount();
133                int lineStart = display.getLineStartOffset(lines - 1);
134                int lineEnd = display.getLineEndOffset(lines - 1);
135                String value = display.getText(lineStart, lineEnd - lineStart);
136                display.append(" ");
137                display.append(command);
138                calculate(Double.parseDouble(value));
139                if (command.equals("="))
140                   display.append("\n" + result);
141                lastCommand = command;
142                display.append("\n");
143                start = true;
144             }
145             catch (BadLocationException e)
146             {
147                e.printStackTrace();
148             }
149          }
150       }
151    }
152
153    /**
154      执行悬而未决的计算。
155       @param x the value to be accumulated with the prior result.
156    */
157    public void calculate(double x)
158    {
159       if (lastCommand.equals("+")) result += x;
160       else if (lastCommand.equals("-")) result -= x;
161       else if (lastCommand.equals("*")) result *= x;
162       else if (lastCommand.equals("/")) result /= x;
163       else if (lastCommand.equals("=")) result = x;
164    }
165 }

实验2:GUI综合编程练习

按实验十四分组名单,组内讨论完成以下编程任务:

练习1:采用GUI界面设计以下程序,并进行部署与发布:

1.编制一个程序,将身份证号.txt 中的信息读入到内存中;

2.按姓名字典序输出人员信息;

3.查询最大年龄的人员信息;

4.查询最小年龄人员信息;

5.输入你的年龄,查询身份证号.txt中年龄与你最近人的姓名、身份证号、年龄、性别和出生地;

6.查询人员中是否有你的同乡。

7.输入身份证信息,查询所提供身份证号的人员信息,要求输入一个身份证数字时,查询界面就显示满足查询条件的查询结果,且随着输入的数字的增多,查询匹配的范围逐渐缩小。

 1 package shiwuzhou;
 2
 3 import java.awt.Dimension;
 4 import java.awt.EventQueue;
 5 import java.awt.Toolkit;
 6
 7 import javax.swing.JFrame;
 8
 9 public class Out {
10
11      public static void main (String args[])
12         {
13              Toolkit t=Toolkit.getDefaultToolkit();
14             Dimension s=t.getScreenSize();
15             EventQueue.invokeLater(() -> {
16                 JFrame frame = new Main1();
17                 frame.setBounds(0, 0,(int)s.getWidth(),(int)s.getHeight());
18                 frame.setTitle("第四组");
19                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
20                 frame.setVisible(true);
21              });
22         }
23
24 }
  1 package shiwuzhou;
  2
  3 import java.awt.BorderLayout;
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 import java.io.BufferedReader;
  7 import java.io.File;
  8 import java.io.FileInputStream;
  9 import java.io.FileNotFoundException;
 10 import java.io.IOException;
 11 import java.io.InputStreamReader;
 12 import java.util.*;
 13 import java.util.Timer;
 14 import javax.swing.*;
 15
 16 public class Main1 extends JFrame
 17 {
 18     private static ArrayList<Person> Personlist;
 19
 20
 21     Scanner scanner = new Scanner(System.in);
 22     File file = new File("D:\\身份证号.txt");
 23
 24     private JPanel Panel;
 25     private JLabel JLabel1;
 26     private JButton Button,Button2,Button3;
 27     private JTextArea text,text1,text2,text3;
 28     boolean tru=true;
 29
 30
 31
 32     public  Main1() {
 33
 34
 35         Panel = new JPanel();Panel.setLayout(null);
 36         Button = new JButton("1:按姓名字典序输出人员信息");
 37         Button2 = new JButton("2:查询最大年龄与最小年龄人员信息");
 38         Button3 = new JButton("查询相近年龄");
 39         JLabel1 = new JLabel("输入身份证号或者地址查询");
 40         JLabel1.setBounds(900, 50, 400, 30);
 41
 42         text=new JTextArea(30,80);text.setBounds(50, 180, 700, 700);
 43         text1=new JTextArea(1,30);text1.setBounds(900, 80, 400, 30);
 44         text2=new JTextArea(30,80);text2.setBounds(900,180,700, 700);
 45         text3=new JTextArea(30,80);text3.setBounds(420,100,200,40);
 46
 47         Button.addActionListener(new Action());Button.setBounds(50,50,300,40);
 48         Button2.addActionListener(new Action1());Button2.setBounds(50,100,300,40);
 49         Button3.addActionListener(new Action2());Button3.setBounds(650,100,120,40);
 50         Panel.add(JLabel1);
 51         Panel.add(Button);
 52         Panel.add(Button2);
 53         Panel.add(Button3);
 54         Panel.add(text);
 55         Panel.add(text2);
 56         Panel.add(text1);
 57         Panel.add(text3);
 58         add(Panel);
 59
 60
 61         Timer timer = new Timer();
 62         TimerTask timeTask=new TimerTask() {
 63
 64              @Override
 65             public void run()
 66              {
 67                      // TODO Auto-generated method stub
 68                      text2.setText(null);
 69                      String place=text1.getText().toString().trim();
 70                      for (int i = 0; i <Personlist.size(); i++)
 71                      {
 72
 73                          String Str=(String)Personlist.get(i).getbirthplace();
 74                          if(Str.contains(place)&&!place.equals(""))
 75                              {
 76                              text2.append(Personlist.get(i).toString());
 77                              }
 78                     }
 79                      for (int i = 0; i <Personlist.size(); i++)
 80                      {
 81
 82                          String Str=(String)Personlist.get(i).getID();
 83                          if(Str.contains(place)&&!place.equals(""))
 84                              {
 85                              text2.append(Personlist.get(i).toString());
 86                              }
 87                     }
 88
 89             }
 90
 91         };timer.schedule(timeTask, 0,100);
 92
 93         Personlist = new ArrayList<>();
 94         try {
 95             FileInputStream fis = new FileInputStream(file);
 96             BufferedReader in = new BufferedReader(new InputStreamReader(fis));
 97             String temp = null;
 98             while ((temp = in.readLine()) != null) {
 99                 Scanner linescanner = new Scanner(temp);
100                 linescanner.useDelimiter(" ");
101                 String name = linescanner.next();
102                 String ID = linescanner.next();
103                 String sex = linescanner.next();
104                 String age = linescanner.next();
105                 String place =linescanner.nextLine();
106                 Person Person = new Person();
107                 Person.setname(name);
108                 Person.setID(ID);
109                 Person.setsex(sex);
110                 int a = Integer.parseInt(age);
111                 Person.setage(a);
112                 Person.setbirthplace(place);
113                 Personlist.add(Person);
114
115             }
116         } catch (FileNotFoundException e) {
117             System.out.println("查找不到信息");
118             e.printStackTrace();
119         } catch (IOException e) {
120             System.out.println("信息读取有误");
121             e.printStackTrace();
122         }
123
124
125     }
126
127
128
129
130     private class Action implements ActionListener
131     {
132     public void actionPerformed(ActionEvent event)
133         {
134          text.setText(null);
135          Collections.sort(Personlist);
136          text.append(Personlist.toString());
137         }
138
139     }
140
141     private class Action1 implements ActionListener
142         {
143         public void actionPerformed(ActionEvent event)
144             {
145             text.setText(null);
146             int max=0,min=100;int j,k1 = 0,k2=0;
147             for(int i=1;i<Personlist.size();i++)
148             {
149                 j=Personlist.get(i).getage();
150                if(j>max)
151                {
152                    max=j;
153                    k1=i;
154                }
155                if(j<min)
156                {
157                    min=j;
158                    k2=i;
159                }
160             }
161             text.append("年龄最大:   "+Personlist.get(k1)+"\n"+"年龄最小:  "+Personlist.get(k2));
162             }
163
164         }
165
166     private class Action2 implements ActionListener
167     {
168     public void actionPerformed(ActionEvent event)
169         {
170          text.setText(null);
171          int a = Integer.parseInt(text3.getText().toString().trim());
172          int d_value=a-Personlist.get(agenear(a)).getage();
173
174          for (int i = 0; i < Personlist.size(); i++)
175          {
176              int p=Personlist.get(i).getage()-a;
177
178              if(p==d_value||-p==d_value) text.append(Personlist.get(i).toString());
179          }
180         }
181
182     }
183
184
185     public static int agenear(int age) {
186
187         int j=0,min=53,d_value=0,k=0;
188          for (int i = 0; i < Personlist.size(); i++)
189          {
190              d_value=Personlist.get(i).getage()-age;
191              if(d_value<0) d_value=-d_value;
192              if (d_value<min)
193              {
194                 min=d_value;
195                 k=i;
196              }
197
198           }    return k;
199
200       }
201
202 }
 1 package shiwuzhou;
 2
 3 public class Person implements Comparable<Person> {
 4 private String name;
 5 private String ID;
 6 private int age;
 7 private String sex;
 8 private String birthplace;
 9
10 public String getname()
11 {
12     return name;
13 }
14 public void setname(String name)
15 {
16     this.name = name;
17 }
18 public String getID()
19 {
20     return ID;
21 }
22 public void setID(String ID)
23 {
24     this.ID= ID;
25 }
26 public int getage()
27 {
28     return age;
29 }
30 public void setage(int age)
31 {
32     this.age= age;
33 }
34 public String getsex()
35 {
36     return sex;
37 }
38 public void setsex(String sex)
39 {
40     this.sex= sex;
41 }
42 public String getbirthplace()
43 {
44     return birthplace;
45 }
46 public void setbirthplace(String birthplace)
47 {
48     this.birthplace= birthplace;
49 }
50
51 public int compareTo(Person o)
52 {
53    return this.name.compareTo(o.getname());
54 }
55
56 public String toString()
57 {
58     return  name+"\t"+sex+"\t"+age+"\t"+ID+"\t"+birthplace+"\n";
59
60 }
61
62
63
64 }

练习2:采用GUI界面设计以下程序,并进行部署与发布

1.编写一个计算器类,可以完成加、减、乘、除的操作

2.利用计算机类,设计一个小学生100以内数的四则运算练习程序,由计算机随机产生10道加减乘除练习题,学生输入答案,由程序检查答案是否正确,每道题正确计10分,错误不计分,10道题测试结束后给出测试总分;

3.将程序中测试练习题及学生答题结果输出到文件,文件名为test.txt。

 1 package shiwuzhou;
 2
 3 import java.awt.Dimension;
 4 import java.awt.EventQueue;
 5 import java.awt.Toolkit;
 6
 7 import javax.swing.JFrame;
 8
 9 public class New {
10
11      public static void main (String args[])
12         {
13              Toolkit t=Toolkit.getDefaultToolkit();
14             Dimension s=t.getScreenSize();
15             EventQueue.invokeLater(() -> {
16                 JFrame frame = new Demo();
17                 frame.setBounds(0, 0,(int)s.getWidth()/2,(int)s.getHeight()/2);
18                 frame.setTitle("第四组");
19                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
20                 frame.setVisible(true);
21              });
22         }
23
24 }
  1 package shiwuzhou;
  2
  3 import java.awt.Font;
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 import java.io.FileNotFoundException;
  7 import java.io.PrintWriter;
  8 import java.util.Collections;
  9 import java.util.Scanner;
 10
 11 import javax.swing.*;
 12
 13 import java.math.*;
 14
 15
 16 public class Demo extends JFrame {
 17
 18     private String[] c=new String[10];
 19     private String[] c1=new String[10];
 20     private int[] list=new int[10];
 21     int i=0,i1=0,sum = 0;
 22     private PrintWriter out = null;
 23     private JTextArea text,text1;
 24     private int counter;
 25
 26     public Demo()  {
 27         JPanel Panel = new JPanel();
 28         Panel.setLayout(null);
 29         JLabel JLabel1=new JLabel("");
 30         JLabel1.setBounds(500, 800, 400, 30);
 31         JLabel1.setFont(new Font("Courier",Font.PLAIN,35));
 32         JButton Button = new JButton("生成题目");
 33         Button.setBounds(50,150,150,50);
 34         Button.setFont(new Font("Courier",Font.PLAIN,20));
 35         Button.addActionListener(new Action());
 36         JButton Button2 = new JButton("确定答案");
 37         Button2.setBounds(300,150,150,50);
 38         Button2.setFont(new Font("Courier",Font.PLAIN,20));
 39         Button2.addActionListener(new Action1());
 40         JButton Button3 = new JButton("读出文件");
 41         Button3.setBounds(500,150,150,50);
 42         Button3.setFont(new Font("Courier",Font.PLAIN,20));
 43         Button3.addActionListener(new Action2());
 44          text=new JTextArea(30,80);text.setBounds(30, 50, 200, 50);
 45          text.setFont(new Font("Courier",Font.PLAIN,35));
 46          text1=new JTextArea(30,80);
 47          text1.setBounds(270, 50, 200, 50);
 48          text1.setFont(new Font("Courier",Font.PLAIN,35));
 49
 50          Panel.add(text);
 51          Panel.add(text1);
 52
 53          Panel.add(Button);
 54          Panel.add(Button2);
 55          Panel.add(Button3);
 56          Panel.add(JLabel1);
 57          add(Panel);
 58
 59
 60
 61
 62
 63
 64
 65     }
 66
 67     private class Action implements ActionListener
 68     {
 69     public void actionPerformed(ActionEvent event)
 70         {
 71         text1.setText("0");
 72         if(i<10) {
 73
 74         int a = 1+(int)(Math.random() * 99);
 75         int b = 1+(int)(Math.random() * 99);
 76         int m= (int) Math.round(Math.random() * 3);
 77       switch(m)
 78       {
 79       case 0:
 80           while(a<b){
 81               b = (int) Math.round(Math.random() * 100);
 82               a = (int) Math.round(Math.random() * 100);
 83           }
 84           c[i]=(i+":"+a+"/"+b+"=");
 85           list[i]=Math.floorDiv(a, b);
 86           text.setText(i+":"+a+"/"+b+"=");
 87           i++;
 88           break;
 89       case 1:
 90           c[i]=(i+":"+a+"*"+b+"=");
 91                 list[i]=Math.multiplyExact(a, b);
 92                 text.setText(i+":"+a+"*"+b+"=");
 93            i++;
 94           break;
 95        case 2:
 96           c[i]=(i+":"+a+"+"+b+"=");
 97                 list[i]=Math.addExact(a, b);
 98           text.setText(i+":"+a+"+"+b+"=");
 99           i++;
100           break ;
101       case 3:
102           while(a<=b){
103               b = (int) Math.round(Math.random() * 100);
104               a = (int) Math.round(Math.random() * 100);
105           }
106           c[i]=(i+":"+a+"-"+b+"=");
107           text.setText(i+":"+a+"-"+b+"=");
108           list[i]=Math.subtractExact(a, b);
109           i++;
110           break ;
111           }
112         }
113       }
114     }
115     private class Action1 implements ActionListener
116     {
117         public void actionPerformed(ActionEvent event)
118         {
119             if(i<10) {
120                 text.setText(null);
121                 String daan=text1.getText().toString().trim();
122                 int a = Integer.parseInt(daan);
123                 if(text1.getText()!="") {
124                     if(list[i1]==a) sum+=10;
125                 }
126                 c1[i1]=daan;
127                 i1++;
128             }
129         }
130     }
131
132
133     private class Action2 implements ActionListener
134     {
135         public void actionPerformed(ActionEvent event)
136             {
137
138             try {
139                 out = new PrintWriter("text.txt");
140             } catch (FileNotFoundException e) {
141             // TODO Auto-generated catch block
142                 e.printStackTrace();
143             }
144             for(int counter=0;counter<10;counter++)
145             {
146                 out.println(c[counter]+c1[counter]);
147             }
148             out.println("成绩"+sum);
149             out.close();
150
151             }
152
153     }
154 }

第三部分:总结

  本周的学习中,虽然通过组内学习,解决了很多问题,但还是有些难题无法解决,我们遇到的问题意是对于Java Web Start部署应用程序这一部分的内容理解还不很透彻。GUI界面设计过程中如何使界面更美观也是 需要努力的地方。

原文地址:https://www.cnblogs.com/hackerZT-7/p/10078113.html

时间: 2024-10-28 09:59:09

王之泰201771010131《面向对象程序设计(java)》第十五周学习总结的相关文章

王艳 《面向对象程序设计》第十五周学习总结

实验十五  GUI编程练习与应用程序部署 一:理论部分. 1.Java 程序的打包:编译完成后,程序员将.class 文件压缩打包为 .jar 文件后,GUI 界面序就可以直接双击图标运行.JAR 文件是压缩的,它使用 ZIP 压缩格式. 创建一个包含清单的 JAR 文件,应该运行:jar cf mMyArchive.jar manifest.mf com/ *.class2.资源:Java 中,应用程序使的类通常需要一些相关数中,应用程序使的类通常需要一些相关数 据文件,这些称为资源 (Res

201771010109焦旭超《面向对象程序设计》第十八周学习总结

1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1) 用户信息输入界面如下图所示: (1)用户点击提交按钮时,用户输入信息显

20177101010101 白玛次仁《面向对象程序设计》第十八周学习总结

实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1) 用户信息输入界面如

201671010114 2016-2017-2 《Java程序设计》第十五周学习总结

上周学习了Swing用户界面组件,通过在框架里添加Swing包里的组件来设计不同的界面.可以用trim来出去文本输入域中输入的空格,setText方法改变文本域中的内容,getText方法来获取用户键入文本.在这一章中事件响应处理方法大多用了lambda表达式.通过添加所需要的组件并利用布局管理器可以形成自己所要的界面.事件响应后的处理方法的编写也是比较重要的一部分.JAR文件既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件,它的目的是给使用者提供一个单独的文件.在实验的过程中不是特

201771010125王瑜《面向对象程序设计(Java)》第十五周学习总结

201771010125王瑜<面向对象程序设计(Java)>第十五周学习总结 一.理论部分 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面程序就可以直接双击图标运行. 2..jar文件(Java归档)既可以包含类文件,也可以包含诸如图像和声音这些其它类型的文件.JAR文件是压缩的,它使用ZIP压缩格式. 3.jar命令格式: jar {ctxui} [vfm0Me] [jar-file] [manifest-file] [entry-poi

张季跃 201771010139《面向对象程序设计(java)》第十五周学习总结

张季跃 201771010139<面向对象程序设计(java)>第十五周学习总结 第一部分:理论知识学习部分 第13章 部署应用程序: JAR文件: Java程序的打包:程序编译完成后,程序员 将.class文件压缩打包为.jar文件后,GUI界面 程序就可以直接双击图标运行. .jar文件(Java归档)既可以包含类文件,也可 以包含诸如图像和声音这些其它类型的文件. JAR文件是压缩的,它使用ZIP压缩格式. 清单文件 (1) 每个JAR文件中包含一个用于描述归档特征的清单文 件(mani

20182327 2019-2020-1 《数据结构与面向对象程序设计》第二第三周学习总结

20182327 2019-2020-1 <数据结构与面向对象程序设计>第二第三周学习总结 教材学习内容总结 在第二章的学习中,首先学习了Java编程的基本格式,然后学会了定义.赋值.使用各种数据类型的变量,可以独立打印数据到屏幕上,最后掌握了如何使用Scanner类的一般使用方法. 从第三章中,我学到了由String.Math.Random等类创建对象(即实例化对象),如果要使用Java.long包以外的类,要使用import声明,最后枚举类型,包装类没有看懂. 教材学习中的问题和解决过程

《数据结构与面向对象程序设计》第二、三周学习总结

目录 20182319 2019-2020-1 <数据结构与面向对象程序设计>第二.三周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 评分: 点评过的同学博客和代码 其他(感悟.思考等,可选) 学习进度条 20182319 2019-2020-1 <数据结构与面向对象程序设计>第二.三周学习总结 @ 教材学习内容总结 ??这两周主要学习的是对于数据的类型以及输入输出的学习和对于几个常用的类的学习. ??首

20182304 《数据结构与面向对象程序设计》第七八周学习总结

20182304 <数据结构与面向对象程序设计>第七八周学习总结 教材学习内容总结 时间复杂度分析:时间复杂度越低,程序运行效率越高.时间复杂度又称为算法的阶,符号计为O(),它由增长函数的主项决定.可以通过数学方法求出增长函数从而确定程序的时间复杂度 线性集合:集合中的元素按直线方式组织.如:队列集合.栈集合 栈是一种线性数据结构,采用后进先出(Last in,first out)的方法处理元素,我们学习使用了数组和链表来实现栈 链表:链表是链式结构的一种.在链表中,对象引用变量也可称为指针

201671010117 2016-2017-2 《Java程序设计》Java第十二周学习心得

Java第十二周学习心得        在第十二周的理论课堂上,老师对1-4章的内容进行了测验,程序填空题和写程序题的分不是很高,程序题的重要部分都有遗漏,对于计算图书的总数那部分不会写,扣分较多,但是现在已经掌握了,接下来要在电脑上多多练习,周五老师对新内容第十章进行了讲解,这周到现在还没有遇到什么问题.