zoukankan      html  css  js  c++  java
  • 十五201771010119穷吉

    实验十五  GUI编程练习与应用程序部署

     

    理论知识:

    JAR文件:

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

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

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

    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压缩格式

    (1) 创建JAR文件 jar cf jar-file input-file(s) c---want to Create a JAR file. eg: 1) jar cf MenuTest.jar *.class *.gif f---want the output to go to a file rather than to stdout. 2) jar cvf MenuTest.jar *.class *.gif v---Produces verbose output to stdout. 3) jar cvf MenuTest.jar * *---create all contents in current directory. 4) jar cv0f MenuTest.jar * 0---don't want the JAR file to be compressed.

    (2) 查看JAR文件 jar tf jar-file t---want to view the Table of contents of the JAR file. eg: 1) jar tvf MenuTest.jar v---Produces verbose output to stdout.

    (3) 提取JAR文件 jar xf jar-file [archived-file(s)] x---want to extract files from the JAR archive. eg: 1) jar xf MenuTest.jar copy.gif(仅提取文件copy.gif) 2) jar xf MenuTest.jar alex/copy.gif(仅提取目录alex下的 文件copy.gif) 3) jar xf MenuTest.jar(提取该JAR中的所有文件或目录)

    (4) 更新JAR文件 jar uf jar-file input-file(s) u---want to update an existing JAR file. eg: 1) jar uf MenuTest.jar copy.gif (5) 索引JAR文件 jar i jar-file i---index an existing JAR file. eg: 1) jar i MenuTest.jar

    清单文件

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

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

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

    1、实验目的与要求

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

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

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

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

    2、实验内容和步骤

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

    测试程序1

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

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

    掌握创建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");
    Image img = new ImageIcon(aboutURL).getImage();//利用about.gif图像文件制作图标,在找到ResourceTest类的地方查找about.gif文件。
    setIconImage(img);

    JTextArea textArea = new JTextArea();
    InputStream stream = getClass().getResourceAsStream("about.txt");
    try (Scanner in = new Scanner(stream, "UTF-8"))//读取about .txt文件
    {
    while (in.hasNext())
    textArea.append(in.nextLine()

    + " ");
    }
    add(textArea);
    }
    }

    结果图:

    测试程序2

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

    了解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()
    {
    // get position, size, title from properties

    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);

    // if no title given, ask user

    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

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

    了解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);//框架默认关闭操作(jfren.出口__关闭);
    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()
    {
    // get position, size, title from preferences从首选项中获取位置、大小、标题

    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);

    // if no title given, ask user如果未给定标题,请询问用户

    String title = node.get("title", "");
    if (title.equals(""))
    title = JOptionPane.showInputDialog("Please supply a frame title:");//标题=joptipan.展示输入对话框(“请提供一个框架标题:”);
    if (title == null) title = "";
    setTitle(title);

    // set up file chooser that shows XML files设置显示XML文件的文件选择器

    final JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new File("."));
    chooser.setFileFilter(new FileNameExtensionFilter("XML files", "xml"));

    // set up menus设置菜单

    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

     

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

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

    package webstart;
    
    import java.awt.*;
    import javax.swing.*;
    
    /**
     * A calculator with a calculation history that can be deployed as a Java Web Start application.
     * @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;
    
    /**
     * A frame with a calculator panel and a menu to load and save the calculator history.
     */
    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();
       }
    
       /**
        * Gets the title from the persistent store or asks the user for the title if there is no prior
        * entry.
        */
       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);
          }
       }
    
       /**
        * Opens a history file and updates the display.
        */
       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);
          }
       }
    
       /**
        * Saves the calculator history to a file.
        */
       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.*;
    
    /**
       A panel with calculator buttons and a result display.
    */
    public class CalculatorPanel extends JPanel
    {  
       private JTextArea display;
       private JPanel panel;
       private double result;
       private String lastCommand;
       private boolean start;
    
       /**
          Lays out the panel.
       */
       public CalculatorPanel()
       {  
          setLayout(new BorderLayout());
    
          result = 0;
          lastCommand = "=";
          start = true;
          
          // add the display
    
          display = new JTextArea(10, 20);
    
          add(new JScrollPane(display), BorderLayout.NORTH);
          
          ActionListener insert = new InsertAction();
          ActionListener command = new CommandAction();
    
          // add the buttons in a 4 x 4 grid
    
          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);
       }
    
       /**
          Gets the history text.
          @return the calculator history
       */
       public String getText()
       {
          return display.getText();
       }
       
       /**
          Appends a string to the history text.
          @param s the string to append
       */
       public void append(String s)
       {
          display.append(s);
       }
    
       /**
          Adds a button to the center panel.
          @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);
       }
    
       /**
          This action inserts the button action string to the
          end of the display text.
       */
       private class InsertAction implements ActionListener
       {
          public void actionPerformed(ActionEvent event)
          {
             String input = event.getActionCommand();
             start = false;
             display.append(input);
          }
       }
    
       /**
          This action executes the command that the button
          action string denotes.
       */
       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();
                }
             }
          }
       }
    
       /**
          Carries out the pending calculation. 
          @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;
       }  
    }
    复制代码
    package webstart;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.text.*;
    
    /**
       A panel with calculator buttons and a result display.
    */
    public class CalculatorPanel extends JPanel
    {  
       private JTextArea display;
       private JPanel panel;
       private double result;
       private String lastCommand;
       private boolean start;
    
       /**
          Lays out the panel.
       */
       public CalculatorPanel()
       {  
          setLayout(new BorderLayout());
    
          result = 0;
          lastCommand = "=";
          start = true;
          
          // add the display
    
          display = new JTextArea(10, 20);
    
          add(new JScrollPane(display), BorderLayout.NORTH);
          
          ActionListener insert = new InsertAction();
          ActionListener command = new CommandAction();
    
          // add the buttons in a 4 x 4 grid
    
          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);
       }
    
       /**
          Gets the history text.
          @return the calculator history
       */
       public String getText()
       {
          return display.getText();
       }
       
       /**
          Appends a string to the history text.
          @param s the string to append
       */
       public void append(String s)
       {
          display.append(s);
       }
    
       /**
          Adds a button to the center panel.
          @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);
       }
    
       /**
          This action inserts the button action string to the
          end of the display text.
       */
       private class InsertAction implements ActionListener
       {
          public void actionPerformed(ActionEvent event)
          {
             String input = event.getActionCommand();
             start = false;
             display.append(input);
          }
       }
    
       /**
          This action executes the command that the button
          action string denotes.
       */
       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();
                }
             }
          }
       }
    
       /**
          Carries out the pending calculation. 
          @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 身份证;
     
    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 身份证;


    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 身份证1 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 身份证1() {
    studentlist = new ArrayList<>();
    Scanner scanner = new Scanner(System.in);
    File file = new File("D:\java\身份证号.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 身份证;

    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) {
    // int a = Integer.parseInt(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+" ";
    }

    }

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

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

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

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

    package 计算器;

    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();

    }

    }

    }

    package 计算器;


    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);
    });
    }

    }

     
     

     

    实验总结:

    这次实验中认识到自己学习的理解还不够到位,不能清楚地了解所学的知识,不会将学到的东西实际运用。需要进一步加强练习。

     
  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/qiongji/p/10091044.html
Copyright © 2011-2022 走看看