201771010108 -韓臘梅-第十五週學習總結

十五週學習總結java

1、知識點總結node

1 JAR文件   web

    1.1  在應用程序打包的時候可以有一個單獨的文件包含多個文件;JAR文件就是爲此設計的。編程

       一個JAR文件既能夠包含類文件,也能夠包含諸如圖像和聲音這些其餘類型的文件。JAR文件是壓縮文件,採用ZIP壓縮格式。
    1.2    建立JAR文件:jar cvf JARFileName File1,File2...
選項    說明
c       建立一個新的或者空的存檔文件並加入文件。若是指定的文件名是目錄,jar程序將會對它們進行遞歸處理。
C       暫時改變目錄,例如jar cvf JARFileName.jar -C classes *.class
         改變classes子目錄,以便增長這些類文件
e       在清單文件中建立一個條目
f        將JAR文件名指定爲第二個命令行參數。若是沒有這個參數,jar命令會將結果寫在標準輸出上(在建立JAR文件時)
         或者從標準輸入中讀取它(在解壓或者列出JAR文件內容時)
    
i        簡歷索引文件(用於加快對大型歸檔的查找)
m      將一個清單文件(manifest)添加到JAR文件中。清單是對歸檔內容和來源的說明。每一個歸檔有一個默認的清單文件。
         可是,若是想驗證歸檔文件的內容,能夠提供本身的清單文件
    
M       不爲條目建立清單文件
t         顯示內容表
u        更新一個已有的JAR文件
v        生成詳細的輸出結果
x        解壓文件。若是提供一個或多個文件名,只解壓這些文件;不然,解壓全部文件
O       存儲,不進行ZIP壓縮
    
    1.3 清單文件:
        除了類文件、圖像和其餘資源外,每一個JAR文件還包含衣蛾用於描述歸檔特徵的清單文件(manifest)
        清單文件被命名爲MANIFEST.MF,它位於JAR文件的一個特殊META-INF子目錄中
        
        複雜的清單條目被分紅多個節。第一節被稱爲主節(main section)。它做用域整個JAR文件。
        隨後的條目用來指定已命名條目的屬性,這些已命名的條目能夠是某個文件、包或者URL,
        他們都必須起始於名爲Name的條目。節與節之間用空行分開
    
    1.4 可執行JAR文件
        可使用jar命令中的e選項指定程序的入口點,即一般須要在調用Java程序加載器時指定的類:
        jar cvfe MyProgram.jar com.mycompany.mypkg.MainAppClass files to add
        根據操做系統的配置,用戶甚至能夠經過雙擊JAR文件圖標來啓動應用程序
    
    1.5 資源
        在applet和引用程序中使用的類一般須要使用一些相關的數據文件,例如:
            圖像和聲音文件。
            帶有消息字符串和按鈕標籤的文本文件。
            二進制數據文件,例如,描述地圖佈局的文件。
        在Java中,這些關聯的文件被稱爲資源(resource)
        
        類加載器知道如何搜索類文件,直到在類路徑、存檔文件或Web服務器上找到爲止。
        利用資源機制,對於非類文件也能夠一樣方便地進行操做,下面是必要的步驟:
        1)獲取具備資源的Class對象,如 AboutPancl.class。
        2)對於圖像或聲音文件,須要調用getresource(filename)得到做爲URL的資源位置,
            而後利用getImage或getAudioClip方法進行讀取。
        3)與圖像或聲音文件不一樣,其餘資源可使用getResourceAsStream方法讀取文件中的數據。
        重點在於類加載器能夠記住如何定位類,而後在同一位置查找關聯的資源。
        
    1.6 密封:
        能夠將Java包密封(scal)以保證不會有其餘的類加入到其中。
        若是在代碼中使用了包可見的類、方法和域,就可能但願密封包。
        若是不密封,其餘類就有可能放在這個包中,進而訪問包可見的特性
        
        密封一個包,須要將包中的全部類放到一個JAR文件中。在默認狀況下,JAR文件中的包時沒有密封的。
        能夠在清單文件的主節中加入下面一行:Sealed:true來改變全局的默認設定。
        對於每一個單獨的包,能夠經過在JAR文件的清單中增長一節,來指定是否想要密封這個包
        
2 應用首選項存儲與服務加載器
    2.1 應用首選項存儲
        應用用戶一般但願保存他們的首選項和定製信息,避免再次啓動應用時去恢復這些配置。
        傳統的作法時將配置信息保存在屬性文件中,首選項API則提供了更爲健壯的解決方案
        
        屬性映射:一中存儲鍵/值對的數據結構,屬性映射一般用來存儲配置信息,有3個特性:
                鍵和值是字符串
                映射能夠很容易地存入文件以及從文件加載
                有一個二級表保存默認值
            屬性映射的Java類名爲properties
        首選項API:一些操做系統中有一個存儲配置信息的中心存儲庫,存儲庫的各個節點分別有一個單獨的鍵/值對錶,
                    能夠用來存儲數值,字符串或字節數組,單不能可串行化對象。
                    一般節點的路徑採用逆置的域名做爲路徑開頭,避免命名衝突,如com/mycompany/myapp
    
    2.2 服務加載器:
        有時會開發插件體系結構的應用,用於開發環境,應用服務器和其餘複雜應用。
        一般提供一個插件時,程序但願插件設計者能有一些自由來肯定如何實現插件的特性數組

3 applet
    applet是包含在HTML頁面中的Java程序。HTML頁面必須告訴瀏覽器要加載哪些applet,每一個applet要放在web頁面的位置
    
    3.1 簡單的applet
        執行applet三步驟:
        將Java源文件編譯爲類文件
        將類打包到一個JAR文件中
        建立一個HTML文件,告訴瀏覽器首先加載哪一個類文件,以及如何設定applet的大小
        
    3.2 applet HTML標記和屬性
        width,height,align, vspace, hspace, code, archive, codebase, object, alt, name, 
    
    3.3 使用參數像applet傳遞信息
        applet可使用內嵌在HTML文件中的參數,這是利用HTML param標記以及所定義的屬性完成的,如使用字體:
        <applet code="FontParamApplet.class" ...>
            <param name="font" value="Helvetica">
        </applet>
        
    3.4    訪問圖像和音頻文件
        applet能夠處理圖像和音頻。圖像必須是GIF、PNG或JPEG格式。音頻文件必須是AU、AIFF、WAV或MIDI格式。動畫支持GIF,可顯示動畫。
        須要利用相對的URL指定圖像和音頻文件的位置。一般經過調用getDocumentBase或getCodease方法得到基URL。
        前一個方法能夠包含applet的HTML網頁的URL;後者能夠得到applet的codebase的URL。
        能夠經過getImage和getAudioClip方法得到基URL和文件的存儲位置。
        
    3.5    applet上下文
        applet在瀏覽器或者applet查看器中運行。applet能夠要求瀏覽器爲它作事情。
        好比,若想在瀏覽器之間進行通訊,applet可調用getAppletContext方法。這個方法將返回一個實現了AppletContext接口的對象。
        能夠認爲AppletContext接口的具體實現認爲是applet與外圍瀏覽器之間的通訊渠道
        
    3.6 applet通訊
        一個網頁能夠包含多個applet。若是一個web頁面包含多個來自同一個codebase的applet,則它們之間就能夠互相通訊。
        getApplets方法返回一個枚舉對象(enumeration object)。
        pplet不能與其餘網頁上的applet進行通訊。
        
4 Java web start
    4.1 Java Web Start是一項在Internet上發佈應用程序的技術。Java Web Start應用程序包含下列主要特性:
            Java Web Start應用程序通常經過瀏覽器發佈。只要Java Web Start應用程序下載到本地就能夠啓動它,而不須要瀏覽器。
            Java Web Start應用程序並不在瀏覽器窗口內。它將顯示在瀏覽器外的一個屬於本身的框架中。
            Java Web Start應用程序不使用瀏覽器的Java實現。瀏覽器只是在加載Java Web Start應用程序描述符時啓動一個外部應用程序。
            這與啓動諸如Adobe Acrobat或RealAudio這樣的輔助應用程序的所使用的機制同樣。
    4.2 數字簽名應用程序能夠被賦予訪問本地機器的任意權限。未簽名的應用程序只能運行在「沙箱」中,它能夠阻止具備潛在危險的操做。
    
    4.3    要想準備一個經過Java Web Start發佈的應用程序,
        1. 將其打包到一個或多個JAR文件中。
        2. 建立一個Java Network Launch Protocol(JNLP)格式的描述符文件。
        3。 將這些文件放置在Web服務器上。
        還須要確保Web服務器對擴展名爲.jnlp的文件報告一個application/x-java-jnlp-file的MIME類型
        (瀏覽器利用MIME類型肯定啓動哪種輔助應用程序)。瀏覽器

2、實驗部分——實驗十五  GUI編程練習與應用程序部署tomcat

1、實驗目的與要求服務器

(1) 掌握Java應用程序的打包操做;數據結構

(2) 瞭解應用程序存儲配置信息的兩種方法;app

(3) 掌握基於JNLP協議的java Web Start應用程序的發佈方法;

(5) 掌握Java GUI 編程技術。

2、實驗內容和步驟

實驗1: 導入第13章示例程序,測試程序並進行代碼註釋。

測試程序1

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");//URL來指向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");//讀取about.txt文件
      try (Scanner in = new Scanner(stream, "UTF-8"))
      {
         while (in.hasNext())
            textArea.append(in.nextLine() + "\n");
      }
      add(textArea);
   }
}
resource

在elipse IDE中調試運行教材585頁程序13-1,結合程序運行結果理解程序;

將所生成的JAR文件移到另一個不一樣的目錄中,再運行該歸檔文件,以便確認程序是從JAR文件中,而不是從當前目錄中讀取的資源。

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

測試程序2

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");//(讀取單個鍵)找出用戶的主目錄,主目錄包含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);
         }
      });
   }
}
properties

elipse IDE中調試運行教材583-584程序13-2,結合程序運行結果理解程序;

瞭解Properties類中經常使用的方法;

測試程序3

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

      // if no title given, ask user

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

elipse IDE中調試運行教材593-594程序13-3,結合程序運行結果理解程序;

瞭解Preferences類中經常使用的方法;

 

再運行也能夠從新輸入

測試程序4

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("\n");
            }
         }
      }
      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);
      }
   }
}
webstart

elipse IDE中調試運行教材619-622程序13-6,結合程序運行結果理解程序;

掌握基於JNLP協議的java Web Start應用程序的發佈方法。

tomcat沒有10.版本

實驗2GUI綜合編程練習

按實驗十四分組名單,組內討論完成如下編程任務:

練習1:採用GUI界面設計如下程序,並進行部署與發佈:

l  編制一個程序,將身份證號.txt 中的信息讀入到內存中;

l  按姓名字典序輸出人員信息;

l  查詢最大年齡的人員信息;

l  查詢最小年齡人員信息;

l  輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;

l  查詢人員中是否有你的同鄉。

l  輸入身份證信息,查詢所提供身份證號的人員信息,要求輸入一個身份證數字時,查詢界面就顯示知足查詢條件的查詢結果,且隨着輸入的數字的增多,查詢匹配的範圍逐漸縮小。

代碼:

package 實驗一;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.Timer;
import javax.swing.*;

public class find extends JFrame
{
    private static ArrayList<Person> Personlist;
    
    
    Scanner scanner = new Scanner(System.in);
    File file = new File("E:\\身份證號.txt");
    
    private JPanel Panel;
    private JLabel JLabel1;
    private JButton Button,Button2,Button3,Button4;
    private JTextArea text,text1,text2,text3;
    boolean tru=true;
    
    
    
    public  find() {

        
        Panel = new JPanel();Panel.setLayout(null);
        Button = new JButton("1:按姓名字典序輸出人員信息");
        Button2 = new JButton("2:查詢最大年齡信息");
        Button4 = new JButton("3:最小年齡人員信息");
        Button3 = new JButton("查詢相近年齡");
        JLabel1 = new JLabel("輸入身份證號或者地址查詢");
        JLabel1.setBounds(900, 50, 400, 30);
        
        text=new JTextArea(30,80);text.setBounds(50, 180, 700, 700);
        text1=new JTextArea(1,30);text1.setBounds(900, 80, 400, 30);
        text2=new JTextArea(30,80);text2.setBounds(900,180,700, 700);
        text3=new JTextArea(30,80);text3.setBounds(420,100,200,40);
       
        Button.addActionListener(new Action());Button.setBounds(50,30,300,40);
        Button2.addActionListener(new Action1());Button2.setBounds(50,80,300,40);
        Button3.addActionListener(new Action2());Button3.setBounds(650,100,120,40);
        Button4.addActionListener(new Action3());Button4.setBounds(50,130,300,40);
        Panel.add(JLabel1);
        Panel.add(Button);
        Panel.add(Button2);
        Panel.add(Button3);
        Panel.add(Button4);
        Panel.add(text);
        Panel.add(text2);
        Panel.add(text1);
        Panel.add(text3);
        add(Panel);
        
        
        Timer timer = new Timer();      
        TimerTask timeTask=new TimerTask() {
            
             @Override
            public void run()
             {             
                     // TODO Auto-generated method stub
                     text2.setText(null);
                     String place=text1.getText().toString().trim();
                     for (int i = 0; i <Personlist.size(); i++) 
                     {
                         
                         String Str=(String)Personlist.get(i).getbirthplace();
                         if(Str.contains(place)&&!place.equals("")) 
                             {
                             text2.append(Personlist.get(i).toString());
                             }  
                    }      
                     for (int i = 0; i <Personlist.size(); i++) 
                     {
                         
                         String Str=(String)Personlist.get(i).getID();
                         if(Str.contains(place)&&!place.equals("")) 
                             {
                             text2.append(Personlist.get(i).toString());
                             }  
                    }    
                     
            }
            
        };timer.schedule(timeTask, 0,100);
     
        Personlist = new ArrayList<>();       
        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 ID = linescanner.next();
                String sex = linescanner.next();
                String age = linescanner.next();
                String place =linescanner.nextLine();
                Person Person = new Person();
                Person.setname(name);
                Person.setID(ID);
                Person.setsex(sex);
                int a = Integer.parseInt(age);
                Person.setage(a);
                Person.setbirthplace(place);
                Personlist.add(Person);

            }
        } catch (FileNotFoundException e) {
            System.out.println("查找不到信息");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("信息讀取有誤");
            e.printStackTrace();
        }
 
        
    }
    
    


    private class Action implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {        
         text.setText(null);
         Collections.sort(Personlist);
         text.append(Personlist.toString());
        }

    }         

    private class Action1 implements ActionListener
        {
        public void actionPerformed(ActionEvent event)
            {        
            text.setText(null);
            int max=0;int j,k1 = 0;
            for(int i=1;i<Personlist.size();i++)
            {
                j=Personlist.get(i).getage();
               if(j>max)
               {
                   max=j; 
                   k1=i;
               }
               
            }  
            text.append("年齡最大:   "+Personlist.get(k1));     
            }
   
        }          
    private class Action3 implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {        
        text.setText(null);
        int min=100;int j,k2=0;
        for(int i=1;i<Personlist.size();i++)
        {
            j=Personlist.get(i).getage();
           
           if(j<min)
           {
               min=j; 
               k2=i;
           }
        }  
        text.append("年齡最小:  "+Personlist.get(k2));     
        }

    }          

    private class Action2 implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
        {        
         text.setText(null);
         int a = Integer.parseInt(text3.getText().toString().trim());         
         int d_value=a-Personlist.get(agenear(a)).getage();
         
         for (int i = 0; i < Personlist.size(); i++)
         {
             int p=Personlist.get(i).getage()-a;
            
             if(p==d_value||-p==d_value) text.append(Personlist.get(i).toString());
         } 
        }

    } 
    
    
    public static int agenear(int age) {
        
        int j=0,min=53,d_value=0,k=0;
         for (int i = 0; i < Personlist.size(); i++)
         {
             d_value=Personlist.get(i).getage()-age;
             if(d_value<0) d_value=-d_value; 
             if (d_value<min) 
             {
                min=d_value;
                k=i;
             }

          }    return k;
         
      }

}
find
package 實驗一;


import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class Out {

     public static void main (String args[])
        {
             Toolkit t=Toolkit.getDefaultToolkit();
            Dimension s=t.getScreenSize(); 
            EventQueue.invokeLater(() -> {
                JFrame frame = new find();
                frame.setBounds(0, 0,(int)s.getWidth(),(int)s.getHeight());
                frame.setTitle("第七組");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             });        
        }
 
}
Out
package 實驗一;

public class Person implements Comparable<Person> {
private String name;
private String ID;
private int age;
private String sex;
private String birthplace;

public String getname() 
{
    return name;
}
public void setname(String name) 
{
    this.name = name;
}
public String getID() 
{
    return ID;
}
public void setID(String ID) 
{
    this.ID= ID;
}
public int getage()
{
    return age;
}
public void setage(int age) 
{
    this.age= age;
}
public String getsex()
{
    return sex;
}
public void setsex(String sex)
{
    this.sex= sex;
}
public String getbirthplace() 
{
    return birthplace;
}
public void setbirthplace(String birthplace)
{
    this.birthplace= birthplace;
}

public int compareTo(Person o) 
{
   return this.name.compareTo(o.getname());
}

public String toString() 
{
    return  name+"\t"+sex+"\t"+age+"\t"+ID+"\t"+birthplace+"\n";

}



}
Person

結果:

練習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] = ( a + "/" + b + "=");
                    list[i] = Math.floorDiv(a, b);
                    text.setText(a + "/" + b + "=");
                    i++;
                    break;
                case 1:
                    c[i] = (a + "*" + b + "=");
                    list[i] = Math.multiplyExact(a, b);
                    text.setText(a + "*" + b + "=");
                    i++;
                    break;
                case 2:
                    c[i] = (a + "+" + b + "=");
                    list[i] = Math.addExact(a, b);
                    text.setText(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] = (a + "-" + b + "=");
                    text.setText(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();

        }

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

結果:

3、實驗總結

          對於測試程序4,在elipse裏面運行不出來,由於沒有jnlp類,並且tomcat沒有10版本的,因此測試實驗4沒有作出來。編程實驗一按姓名字典序輸出人員信息,即模糊查找在實現中有一些困難。

相關文章
相關標籤/搜索