zoukankan      html  css  js  c++  java
  • 201771010123汪慧和《面向对象程序设计Java》第十五周实验总结

    一、理论部分

    1、JAR文件

    (1)Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面 程序就可以直接双击图标运行。

    (2).jar文件(Java归档)既可以包含类文件,也可以包含诸如图像和声音这些其它类型的文件。 

    (3)JAR文件是压缩的,它使用ZIP压缩格式。

    2、jar命令

    (1)jar命令格式: jar {ctxui} [vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...

    (2)Jar命令选项(教材581页表13-1):

    – -c 创建一个新的或者空的存档文件并加入文件。

    – -C 暂时改变到指定的目录

    – -e 在清单文件中创建一个条目

    – -f 将JAR文件名指定为第二个命令行参数

    – -i 为指定的JAR文件产生索引信息

    – -m 将一个清单文件(manifest)添加到JAR文件中

    – -M 不产生所有项的清单文件(manifest)

    – -t 列出存档内容的列表

    – -u 更新已存在的JAR文件

    – -v 生成详细的输出结果

    – -x 解压存档中的命名的(或所有的〕文件

    – -0 只存储方式,不用ZIP压缩格式

    3、创建JAR文件

      jar cf jar-file input-file(s)      c---want to Create a JAR file.

    4、查看JAR文件

    jar tf jar-file      t---want to view the Table of contents of the JAR file.

    5、提取JAR文件

    jar xf jar-file [archived-file(s)]      x---want to extract files from the JAR archive.

    6、更新JAR文件

    jar uf jar-file input-file(s)      u---want to update an existing JAR file.

    7、索引JAR文件

    jar i jar-file      i---index an existing JAR file.

    8、清单文件

    (1)每个JAR文件中包含一个用于描述归档特征的清单文 件(manifest)。清单文件被命名为MANIFEST.MF,它位于JAR文件的一个特殊的META-INF子目录中。

    (2) 最小的符合标准的清单文件是很简单的: Manifest-Version:1.0 复杂的清单文件包含多个条目,这些条目被分成 多个节。第一节被称为主节,作用于整个JAR文件。 随后的条目用来指定已命名条目的属性,可以是文件 、包或者URL。

    (3)清单文件的节与节之间用空行分开,最后一行必须以 换行符结束。否则,清单文件将无法被正确地读取。

    – 创建一个包含清单的JAR文件,应该运行: jar cfm MyArchive.jar manifest.mf com/*.class

    – 要更新一个已有JAR文件的清单,则需要将增加的部分 放置到一个文本文件中,运行如下命令: jar ufm MyArchive.jar manifest-additions.mf

    9、运行JAR文件

    (1)用户可以通过下面的命令来启动应用程序: java –jar MyProgram.jar 

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

    10、资源

    (1)Java中,应用程序使用的类通常需要一些相关的数 据文件,这些文件称为资源(Resource)。

    –图像和声音文件。 –带有消息字符串和按钮标签的文本文件。

    –二进制数据文件,如:描述地图布局的文件。

    (2)类加载器知道如何搜索类文件,直到在类路径、 存档文件或Web服务器上找到为止。

    (3)利用资源机制对于非类文件也可以进行同样操作 ,具体步骤如下:

    – 获得资源的Class对象。 – 如果资源是一个图像或声音文件,那么就需要调用 getresource(filename)获得资源的URL位置,然后利 用getImage或getAudioClip方法进行读取。

    – 如果资源是文本或二进制文件,那么就可以使用 getResouceAsStream方法读取文件中的数据。

    (4)资源文件可以与类文件放在同一个目录中,也可 以将资源文件放在其它子目录中。具体有以下两种方式:

    –相对资源名:如data/text/about.txt 它会被解释为相对于加载这个资源的类所在的包。

    –绝对资源名:如/corejava/title.txt

    11、Eclipse导出JAR文件

    (1)工程没有引用外部jar包时,直接导出。

         选中工程---->右键,Export...--->Java-- ->JAR file--->next-->选择jar file的路 径 及 名 称 -->next-->next---> 选 择 main class--->finish.

    (2)当工程引用了其他的外部jar时,由于Eclipse 不支持同时导出外部jar包的功能,导出过程比较复杂。(*)

    二、实验部分

    1、实验目的与要求

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

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

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

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

    2、实验内容和步骤

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

    测试程序1

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

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

    l 掌握创建JAR文件的方法;

    package resource;
    
    import java.awt.*;
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.swing.*;
    
    /**
     * @version 1.41 2015-06-12
     * @author Cay Horstmann
     */
    public class ResourceTest
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() -> {
             JFrame frame = new ResourceTestFrame();
             frame.setTitle("ResourceTest");
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setVisible(true);
          });
       }
    }
    
    /**
     * A frame that loads image and text resources.
     */
    class ResourceTestFrame extends JFrame
    {
       private static final int DEFAULT_WIDTH = 300;
       private static final int DEFAULT_HEIGHT = 300;
    
       public ResourceTestFrame()
       {
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
          URL aboutURL = getClass().getResource("about.gif");
          System.out.println(aboutURL);
          Image img = new ImageIcon(aboutURL).getImage();//利用about.gif图像文件制作图标
          setIconImage(img);
    
          JTextArea textArea = new JTextArea();//创建一个textArea对象
          InputStream stream = getClass().getResourceAsStream("about.txt");//读取about.txt文件
          try (Scanner in = new Scanner(stream, "UTF-8"))
          {
             while (in.hasNext())
                 textArea.append(in.nextLine() + "
    ");
          }
          add(textArea);
       }
    }

    实验结果如下图所示:

    利用命令行方式得到jar文件:

    利用Eclipse方式导出jar文件:

    测试程序2

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

    l 了解Properties类中常用的方法;

    package properties;
    
    import java.awt.EventQueue;
    import java.awt.event.*;
    import java.io.*;
    import java.util.Properties;
    
    import javax.swing.*;
    
    /**
     * A program to test properties. The program remembers the frame position, size,
     * and title.
     * @version 1.01 2015-06-16
     * @author Cay Horstmann
     */
    public class PropertiesTest
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() -> {
             PropertiesFrame frame = new PropertiesFrame();
             frame.setVisible(true);
          });
       }
    }
    
    /**
     * A frame that restores position and size from a properties file and updates
     * the properties upon exit.
     */
    class PropertiesFrame extends JFrame
    {
       private static final int DEFAULT_WIDTH = 300;
       private static final int DEFAULT_HEIGHT = 200;
    
       private File propertiesFile;
       private Properties settings;
    
       public PropertiesFrame()
       {
          // 从属性中获取位置、大小和标题
    
          String userDir = System.getProperty("user.home");
          File propertiesDir = new File(userDir, ".corejava");
          if (!propertiesDir.exists()) propertiesDir.mkdir();
          propertiesFile = new File(propertiesDir, "program.properties");
    
          Properties defaultSettings = new Properties();
          defaultSettings.setProperty("left", "0");
          defaultSettings.setProperty("top", "0");
          defaultSettings.setProperty("width", "" + DEFAULT_WIDTH);
          defaultSettings.setProperty("height", "" + DEFAULT_HEIGHT);
          defaultSettings.setProperty("title", "");
    
          settings = new Properties(defaultSettings);
    
          if (propertiesFile.exists()) 
             try (InputStream in = new FileInputStream(propertiesFile))
             {         
                settings.load(in);
             }
             catch (IOException ex)
             {
                ex.printStackTrace();
             }
    
          int left = Integer.parseInt(settings.getProperty("left"));
          int top = Integer.parseInt(settings.getProperty("top"));
          int width = Integer.parseInt(settings.getProperty("width"));
          int height = Integer.parseInt(settings.getProperty("height"));
          setBounds(left, top, width, height);
    
          // 如果没有标题,询问用户
    
          String title = settings.getProperty("title");
          if (title.equals(""))
             title = JOptionPane.showInputDialog("Please supply a frame title:");
          if (title == null) title = "";
          setTitle(title);
    
          addWindowListener(new WindowAdapter()
          {
             public void windowClosing(WindowEvent event)
             {
                settings.setProperty("left", "" + getX());
                settings.setProperty("top", "" + getY());
                settings.setProperty("width", "" + getWidth());
                settings.setProperty("height", "" + getHeight());
                settings.setProperty("title", getTitle());
                try (OutputStream out = new FileOutputStream(propertiesFile))
                {
                   settings.store(out, "Program Properties");
                }
                catch (IOException ex)
                {
                   ex.printStackTrace();
                }
                System.exit(0);
             }
          });
       }
    }

    实验结果如下图所示:

    测试程序3

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

    l 了解Preferences类中常用的方法;

    package preferences;
    
    import java.awt.*;
    import java.io.*;
    import java.util.prefs.*;
    
    import javax.swing.*;
    import javax.swing.filechooser.*;
    
    /**
     * A program to test preference settings. The program remembers the frame
     * position, size, and title.
     * @version 1.03 2015-06-12
     * @author Cay Horstmann
     */
    public class PreferencesTest
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() -> {
             PreferencesFrame frame = new PreferencesFrame();
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setVisible(true);
          });
       }
    }
    
    /**
     * A frame that restores position and size from user preferences and updates the
     * preferences upon exit.
     */
    class PreferencesFrame extends JFrame
    {
       private static final int DEFAULT_WIDTH = 300;
       private static final int DEFAULT_HEIGHT = 200;
       private Preferences root = Preferences.userRoot();
       private Preferences node = root.node("/com/horstmann/corejava");
    
       public PreferencesFrame()
       {
          // 从首选项获取位置、大小和标题
    
          int left = node.getInt("left", 0);
          int top = node.getInt("top", 0);
          int width = node.getInt("width", DEFAULT_WIDTH);
          int height = node.getInt("height", DEFAULT_HEIGHT);
          setBounds(left, top, width, height);
    
          //如果没有标题,询问用户
    
          String title = node.get("title", "");
          if (title.equals(""))
             title = JOptionPane.showInputDialog("Please supply a frame title:");
          if (title == null) title = "";
          setTitle(title);
    
          // 设置显示XML文件的文件选择器
    
          final JFileChooser chooser = new JFileChooser();
          chooser.setCurrentDirectory(new File("."));
          chooser.setFileFilter(new FileNameExtensionFilter("XML files", "xml"));
    
          //设置菜单
    
          JMenuBar menuBar = new JMenuBar();
          setJMenuBar(menuBar);
          JMenu menu = new JMenu("File");
          menuBar.add(menu);
    
          JMenuItem exportItem = new JMenuItem("Export preferences");
          menu.add(exportItem);
          exportItem
                .addActionListener(event -> {
                   if (chooser.showSaveDialog(PreferencesFrame.this) == JFileChooser.APPROVE_OPTION)
                   {
                      try
                      {
                         savePreferences();
                         OutputStream out = new FileOutputStream(chooser
                               .getSelectedFile());
                         node.exportSubtree(out);
                         out.close();
                      }
                      catch (Exception e)
                      {
                         e.printStackTrace();
                      }
                   }
                });
    
          JMenuItem importItem = new JMenuItem("Import preferences");
          menu.add(importItem);
          importItem
                .addActionListener(event -> {
                   if (chooser.showOpenDialog(PreferencesFrame.this) == JFileChooser.APPROVE_OPTION)
                   {
                      try
                      {
                         InputStream in = new FileInputStream(chooser
                               .getSelectedFile());
                         Preferences.importPreferences(in);
                         in.close();
                      }
                      catch (Exception e)
                      {
                         e.printStackTrace();
                      }
                   }
                });
    
          JMenuItem exitItem = new JMenuItem("Exit");
          menu.add(exitItem);
          exitItem.addActionListener(event -> {
             savePreferences();
             System.exit(0);
          });
       }
       
       public void savePreferences() 
       {
          node.putInt("left", getX());
          node.putInt("top", getY());
          node.putInt("width", getWidth());
          node.putInt("height", getHeight());
          node.put("title", getTitle());      
       }
    }

    实验结果如下图所示:

    测试程序4

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

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

    package webstart;
    
    import java.awt.*;
    import javax.swing.*;
    
    /**
     * 具有可作为Java Web启动应用程序部署的计算历史的计算器。
     * @version 1.04 2015-06-12
     * @author Cay Horstmann
     */
    public class Calculator
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() ->             {
                   CalculatorFrame frame = new CalculatorFrame();
                   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                   frame.setVisible(true);
             });
       }
    }
    package webstart;
    
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import javax.jnlp.BasicService;
    import javax.jnlp.FileContents;
    import javax.jnlp.FileOpenService;
    import javax.jnlp.FileSaveService;
    import javax.jnlp.PersistenceService;
    import javax.jnlp.ServiceManager;
    import javax.jnlp.UnavailableServiceException;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    
    /**
     * 一个带有计算器面板和菜单的框架,用来载入和保存计算器历史。
     */
    public class CalculatorFrame extends JFrame
    {
       private CalculatorPanel panel;
    
       public CalculatorFrame()
       {
          setTitle();
          panel = new CalculatorPanel();
          add(panel);
    
          JMenu fileMenu = new JMenu("File");
          JMenuBar menuBar = new JMenuBar();
          menuBar.add(fileMenu);
          setJMenuBar(menuBar);
    
          JMenuItem openItem = fileMenu.add("Open");
          openItem.addActionListener(event -> open());
          JMenuItem saveItem = fileMenu.add("Save");
          saveItem.addActionListener(event -> save());
          
          pack();
       }
    
       /**
        * 从持久存储中获取标题,或者在没有以前的条目的情况下向用户请求标题。
        */
       public void setTitle()
       {
          try
          {
             String title = null;
    
             BasicService basic = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
             URL codeBase = basic.getCodeBase();
    
             PersistenceService service = (PersistenceService) ServiceManager
                   .lookup("javax.jnlp.PersistenceService");
             URL key = new URL(codeBase, "title");
    
             try
             {
                FileContents contents = service.get(key);
                InputStream in = contents.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                title = reader.readLine();
             }
             catch (FileNotFoundException e)
             {
                title = JOptionPane.showInputDialog("Please supply a frame title:");
                if (title == null) return;
    
                service.create(key, 100);
                FileContents contents = service.get(key);
                OutputStream out = contents.getOutputStream(true);
                PrintStream printOut = new PrintStream(out);
                printOut.print(title);
             }
             setTitle(title);
          }
          catch (UnavailableServiceException | IOException e)
          {
             JOptionPane.showMessageDialog(this, e);
          }
       }
    
       /**
        * 打开历史文件并更新显示。
        */
       public void open()
       {
          try
          {
             FileOpenService service = (FileOpenService) ServiceManager
                   .lookup("javax.jnlp.FileOpenService");
             FileContents contents = service.openFileDialog(".", new String[] { "txt" });
    
             JOptionPane.showMessageDialog(this, contents.getName());
             if (contents != null)
             {
                InputStream in = contents.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                String line;
                while ((line = reader.readLine()) != null)
                {
                   panel.append(line);
                   panel.append("
    ");
                }
             }
          }
          catch (UnavailableServiceException e)
          {
             JOptionPane.showMessageDialog(this, e);
          }
          catch (IOException e)
          {
             JOptionPane.showMessageDialog(this, e);
          }
       }
    
       /**
        * 将计算器历史保存到文件中。
        */
       public void save()
       {
          try
          {
             ByteArrayOutputStream out = new ByteArrayOutputStream();
             PrintStream printOut = new PrintStream(out);
             printOut.print(panel.getText());
             InputStream data = new ByteArrayInputStream(out.toByteArray());
             FileSaveService service = (FileSaveService) ServiceManager
                   .lookup("javax.jnlp.FileSaveService");
             service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt");
          }
          catch (UnavailableServiceException e)
          {
             JOptionPane.showMessageDialog(this, e);
          }
          catch (IOException e)
          {
             JOptionPane.showMessageDialog(this, e);
          }
       }
    }
    package webstart;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;
    
    /**
       具有计算器按钮和结果显示的面板。
    */
    public class CalculatorPanel extends JPanel
    {  
       private JTextArea display;
       private JPanel panel;
       private double result;
       private String lastCommand;
       private boolean start;
    
       /**
          列出面板。
       */
       public CalculatorPanel()
       {  
          setLayout(new BorderLayout());
    
          result = 0;
          lastCommand = "=";
          start = true;
          
          // 添加显示
          display = new JTextArea(10, 20);
    
          add(new JScrollPane(display), BorderLayout.NORTH);
          
          ActionListener insert = new InsertAction();
          ActionListener command = new CommandAction();
    
          // 在4×4网格中添加按钮
    
          panel = new JPanel();
          panel.setLayout(new GridLayout(4, 4));
    
          addButton("7", insert);
          addButton("8", insert);
          addButton("9", insert);
          addButton("/", command);
    
          addButton("4", insert);
          addButton("5", insert);
          addButton("6", insert);
          addButton("*", command);
    
          addButton("1", insert);
          addButton("2", insert);
          addButton("3", insert);
          addButton("-", command);
    
          addButton("0", insert);
          addButton(".", insert);
          addButton("=", command);
          addButton("+", command);
    
          add(panel, BorderLayout.CENTER);
       }
    
       /**
          获取历史文本。
          @return the calculator history
       */
       public String getText()
       {
          return display.getText();
       }
       
       /**
          将字符串追加到历史文本中。
          @param s the string to append
       */
       public void append(String s)
       {
          display.append(s);
       }
    
       /**
          向中心面板添加一个按钮。
          @param label the button label
          @param listener the button listener
       */
       private void addButton(String label, ActionListener listener)
       {  
          JButton button = new JButton(label);
          button.addActionListener(listener);
          panel.add(button);
       }
    
       /**
          此操作将按钮操作字符串插入到显示文本结束。
       */
       private class InsertAction implements ActionListener
       {
          public void actionPerformed(ActionEvent event)
          {
             String input = event.getActionCommand();
             start = false;
             display.append(input);
          }
       }
    
       /**
          此操作执行按钮的命令。动作字符串表示。
       */
       private class CommandAction implements ActionListener
       {
          public void actionPerformed(ActionEvent event)
          {  
             String command = event.getActionCommand();
    
             if (start)
             {  
                if (command.equals("-")) 
                { 
                   display.append(command); 
                   start = false; 
                }
                else 
                   lastCommand = command;
             }
             else
             {  
                try
                {
                   int lines = display.getLineCount();
                   int lineStart = display.getLineStartOffset(lines - 1);
                   int lineEnd = display.getLineEndOffset(lines - 1);
                   String value = display.getText(lineStart, lineEnd - lineStart);
                   display.append(" ");
                   display.append(command); 
                   calculate(Double.parseDouble(value));
                   if (command.equals("="))
                      display.append("
    " + result);
                   lastCommand = command;
                   display.append("
    ");
                   start = true;
                }
                catch (BadLocationException e)
                {
                   e.printStackTrace();
                }
             }
          }
       }
    
       /**
         执行悬而未决的计算。
          @param x the value to be accumulated with the prior result.
       */
       public void calculate(double x)
       {
          if (lastCommand.equals("+")) result += x;
          else if (lastCommand.equals("-")) result -= x;
          else if (lastCommand.equals("*")) result *= x;
          else if (lastCommand.equals("/")) result /= x;
          else if (lastCommand.equals("=")) result = x;
       }  
    }

    实验2GUI综合编程练习

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

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

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

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

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

    l 查询最小年龄人员信息;

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

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

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

    package 练习1;
    
    import java.awt.*;
    import javax.swing.*;
    
    public class ButtonTest {
        public static void main(String[] args) {
            EventQueue.invokeLater(() -> {
                JFrame frame = new Main();
                frame.setTitle("身份证");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            });
        }
    }
    
    
    package 练习1;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Scanner;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class Main extends JFrame {
        private static ArrayList<Student> studentlist;
        private static ArrayList<Student> list;
        private JPanel panel;
        private JPanel buttonPanel;
        private static final int DEFAULT_WITH = 600;
        private static final int DEFAULT_HEIGHT = 300;
    
        public Main() {
            studentlist = new ArrayList<>();
            Scanner scanner = new Scanner(System.in);
            File file = new File("C:\Users\ASUS\Desktop\身份证号.txt");
            try {
                FileInputStream fis = new FileInputStream(file);
                BufferedReader in = new BufferedReader(new InputStreamReader(fis));
                String temp = null;
                while ((temp = in.readLine()) != null) {
    
                    Scanner linescanner = new Scanner(temp);
    
                    linescanner.useDelimiter(" ");
                    String name = linescanner.next();
                    String number = linescanner.next();
                    String sex = linescanner.next();
                    String age = linescanner.next();
                    String province = linescanner.nextLine();
                    Student student = new Student();
                    student.setName(name);
                    student.setnumber(number);
                    student.setsex(sex);
                    int a = Integer.parseInt(age);
                    student.setage(a);
                    student.setprovince(province);
                    studentlist.add(student);
    
                }
            } catch (FileNotFoundException e) {
                System.out.println("学生信息文件找不到");
                e.printStackTrace();
            } catch (IOException e) {
                System.out.println("学生信息文件读取错误");
                e.printStackTrace();
            }
            panel = new JPanel();
            panel.setLayout(new BorderLayout());
            JTextArea jt = new JTextArea();
            panel.add(jt);
            add(panel, BorderLayout.NORTH);
            buttonPanel = new JPanel();
            buttonPanel.setLayout(new GridLayout(1, 7));
            JButton jButton = new JButton("字典排序");
            JButton jButton1 = new JButton("年龄最大和年龄最小");
            JLabel lab = new JLabel("猜猜你的老乡");
            JTextField jt1 = new JTextField();
            JLabel lab1 = new JLabel("找找同龄人(年龄相近):");
            JTextField jt2 = new JTextField();
            JLabel lab2 = new JLabel("输入你的身份证号码:");
            JTextField jt3 = new JTextField();
            JButton jButton2 = new JButton("退出");
            jButton.setBounds(110, 90, 60, 30);
            jButton1.setBounds(110, 90, 60, 30);
            jt1.setBounds(110, 90, 60, 30);
            jt2.setBounds(110, 90, 60, 30);
            jt3.setBounds(110, 90, 60, 30);
            jButton2.setBounds(110, 90, 60, 30);
            jButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    Collections.sort(studentlist);
                    jt.setText(studentlist.toString());
                }
            });
            jButton1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    int max = 0, min = 100;
                    int j, k1 = 0, k2 = 0;
                    for (int i = 1; i < studentlist.size(); i++) {
                        j = studentlist.get(i).getage();
                        if (j > max) {
                            max = j;
                            k1 = i;
                        }
                        if (j < min) {
                            min = j;
                            k2 = i;
                        }
    
                    }
                    jt.setText("年龄最大:" + studentlist.get(k1) + "年龄最小:" + studentlist.get(k2));
                }
            });
            jButton2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    dispose();
                    System.exit(0);
                }
            });
            jt1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String find = jt1.getText();
                    String text="";
                    String place = find.substring(0, 3);
                    for (int i = 0; i < studentlist.size(); i++) {
                        if (studentlist.get(i).getprovince().substring(1, 4).equals(place)) {
                            text+="
    "+studentlist.get(i);
                            jt.setText("老乡:" + text);
                        }
                    }
                }
            });
            jt2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String yourage = jt2.getText();
                    int a = Integer.parseInt(yourage);
                    int near = agenear(a);
                    int value = a - studentlist.get(near).getage();
                    jt.setText("年龄相近:" + studentlist.get(near));
                }
            });
            jt3.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    list = new ArrayList<>();
                    Collections.sort(studentlist);
                    String key = jt3.getText();
                    for (int i = 1; i < studentlist.size(); i++) {
                        if (studentlist.get(i).getnumber().contains(key)) {                        
                            list.add(studentlist.get(i));                        
                            jt.setText("emmm!你可能是:
    " + list);
                            //System.out.println("可能的人:" + studentlist.get(i));
                            //jt.setText("可能的人:" + studentlist.get(i));
                        }                    
                    }
                }
            });
            buttonPanel.add(jButton);
            buttonPanel.add(jButton1);
            buttonPanel.add(lab);
            buttonPanel.add(jt1);
            buttonPanel.add(lab1);
            buttonPanel.add(jt2);
            buttonPanel.add(lab2);
            buttonPanel.add(jt3);
            buttonPanel.add(jButton2);
            add(buttonPanel, BorderLayout.SOUTH);
            setSize(DEFAULT_WITH, DEFAULT_HEIGHT);
        }
    
        public static int agenear(int age) {
            int min = 53, value = 0, k = 0;
            for (int i = 0; i < studentlist.size(); i++) {
                value = studentlist.get(i).getage() - age;
                if (value < 0)
                    value = -value;
                if (value < min) {
                    min = value;
                    k = i;
                }
            }
            return k;
        }
    
    }
    package 练习1;
    
    public class Student implements Comparable<Student> {
    
        private String name;
        private String number ;
        private String sex ;
        private int age;
        private String province;
       
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getnumber() {
            return number;
        }
        public void setnumber(String number) {
            this.number = number;
        }
        public String getsex() {
            return sex ;
        }
        public void setsex(String sex ) {
            this.sex =sex ;
        }
        public int getage() {
    
            return age;
            }
            public void setage(int age) {
            this.age= age;
            }
    
        public String getprovince() {
            return province;
        }
        public void setprovince(String province) {
            this.province=province ;
        }
    
        public int compareTo(Student o) {
           return this.name.compareTo(o.getName());
        }
    
        public String toString() {
            return  name+"	"+sex+"	"+age+"	"+number+"	"+province+"
    ";
        }    
    }

    实验结果如下图所示:

    输入6:

    输入65:

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

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

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

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

    package 实验2;
    
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Toolkit;
    
    import javax.swing.JFrame;
    
    public class New {
    
         public static void main (String args[])
            {
                 Toolkit t=Toolkit.getDefaultToolkit();
                Dimension s=t.getScreenSize(); 
                EventQueue.invokeLater(() -> {
                    JFrame frame = new Demo();
                    frame.setBounds(0, 0,(int)s.getWidth()/2,(int)s.getHeight()/2);
                    frame.setTitle("第四组");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                 });        
            }
     
    }
    package 实验2;
    
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.Collections;
    import java.util.Scanner;
    
    import javax.swing.*;
    
    import java.math.*;
    
    
    public class Demo extends JFrame {
        
        private String[] c=new String[10];
        private String[] c1=new String[10];
        private int[] list=new int[10];
        int i=0,i1=0,sum = 0;
        private PrintWriter out = null;
        private JTextArea text,text1;
        private int counter;
        
        public Demo()  {
            JPanel Panel = new JPanel();
            Panel.setLayout(null);
            JLabel JLabel1=new JLabel("");
            JLabel1.setBounds(500, 800, 400, 30);
            JLabel1.setFont(new Font("Courier",Font.PLAIN,35));
            JButton Button = new JButton("生成题目");
            Button.setBounds(50,150,150,50);
            Button.setFont(new Font("Courier",Font.PLAIN,20)); 
            Button.addActionListener(new Action());
            JButton Button2 = new JButton("确定答案");
            Button2.setBounds(300,150,150,50);
            Button2.setFont(new Font("Courier",Font.PLAIN,20));
            Button2.addActionListener(new Action1());
            JButton Button3 = new JButton("读出文件");
            Button3.setBounds(500,150,150,50);
            Button3.setFont(new Font("Courier",Font.PLAIN,20));
            Button3.addActionListener(new Action2());
             text=new JTextArea(30,80);text.setBounds(30, 50, 200, 50);
             text.setFont(new Font("Courier",Font.PLAIN,35));
             text1=new JTextArea(30,80);
             text1.setBounds(270, 50, 200, 50);
             text1.setFont(new Font("Courier",Font.PLAIN,35));
    
             Panel.add(text);
             Panel.add(text1);
    
             Panel.add(Button);
             Panel.add(Button2);
             Panel.add(Button3);
             Panel.add(JLabel1);
             add(Panel);
             
             
             
    
    
               
                      
        }
        
        private class Action implements ActionListener
        {
        public void actionPerformed(ActionEvent event)
            {        
            text1.setText("0");
            if(i<10) {
            
            int a = 1+(int)(Math.random() * 99);
            int b = 1+(int)(Math.random() * 99);
            int m= (int) Math.round(Math.random() * 3);
          switch(m)
          {
          case 0:
              while(a<b){  
                  b = (int) Math.round(Math.random() * 100);
                  a = (int) Math.round(Math.random() * 100); 
              }  
              c[i]=(i+":"+a+"/"+b+"=");
              list[i]=Math.floorDiv(a, b);
              text.setText(i+":"+a+"/"+b+"=");
              i++;   
              break; 
          case 1:
              c[i]=(i+":"+a+"*"+b+"=");
                    list[i]=Math.multiplyExact(a, b);
                    text.setText(i+":"+a+"*"+b+"=");        
               i++;
              break;
           case 2:
              c[i]=(i+":"+a+"+"+b+"=");
                    list[i]=Math.addExact(a, b);
              text.setText(i+":"+a+"+"+b+"=");
              i++;
              break ;
          case 3:
              while(a<=b){  
                  b = (int) Math.round(Math.random() * 100);
                  a = (int) Math.round(Math.random() * 100); 
              }    
              c[i]=(i+":"+a+"-"+b+"=");
              text.setText(i+":"+a+"-"+b+"=");
              list[i]=Math.subtractExact(a, b);
              i++;
              break ;
              }
            }
          }
        }      
        private class Action1 implements ActionListener
        {
            public void actionPerformed(ActionEvent event)
            {    
                if(i<10) {
                    text.setText(null);        
                    String daan=text1.getText().toString().trim();
                    int a = Integer.parseInt(daan);
                    if(text1.getText()!="") {
                        if(list[i1]==a) sum+=10;
                    }        
                    c1[i1]=daan;
                    i1++; 
                }
            }
        }      
        
    
        private class Action2 implements ActionListener
        {
            public void actionPerformed(ActionEvent event)
                {
             
                try {
                    out = new PrintWriter("text.txt");
                } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                for(int counter=0;counter<10;counter++)
                {
                    out.println(c[counter]+c1[counter]);
                }
                out.println("成绩"+sum);
                out.close();
    
                }
    
        }   
    }

    实验结果如下图所示:

     

    三、实验总结

       这周的实验主要还是复习图形用户界面的设置,对前面的实验加之完善。另外还学习了jar文件的生成。周六晚上学长讲解了javaweb,但是对这方面的知识还是不太理解。

      

  • 相关阅读:
    Educational Codeforces Round 86 (Rated for Div. 2) D. Multiple Testcases
    Educational Codeforces Round 86 (Rated for Div. 2) C. Yet Another Counting Problem
    HDU
    HDU
    HDU
    HDU
    Good Bye 2019 C. Make Good (异或的使用)
    Educational Codeforces Round 78 (Rated for Div. 2) C. Berry Jam
    codeforces 909C. Python Indentation
    codeforces1054 C. Candies Distribution
  • 原文地址:https://www.cnblogs.com/http-www-whh0601-cnblogs-com/p/10077872.html
Copyright © 2011-2022 走看看