EncryptorGUI.java 的程式原始碼如下
import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import encryptor.Encrypt; import java.io.*; public class EncryptorGUI { // 屬性區 private JFrame frame; private ArrayList<JComponent> GUIComponent; private String[] name; private int att[][]; private Encrypt e; private String userinput; private String result; // 設定屬性的建構子 public EncryptorGUI() { // fill 、 anchor 、 n 為常數 int fill[] = { GridBagConstraints.BOTH, GridBagConstraints.VERTICAL, GridBagConstraints.HORIZONTAL, GridBagConstraints.NONE}; int anchor[] = { GridBagConstraints.CENTER, GridBagConstraints.EAST, GridBagConstraints.SOUTHEAST, GridBagConstraints.SOUTH, GridBagConstraints.SOUTHWEST, GridBagConstraints.WEST, GridBagConstraints.NORTHWEST, GridBagConstraints.NORTH, GridBagConstraints.NORTHEAST}; int a[][] = {{0, 0, 1, 1, 0, 0, fill[3], anchor[5]}, {0, 1, 1, 1, 0, 0, fill[3], anchor[5]}, {0, 3, 7, 1, 0, 0, fill[3], anchor[5]}, {1, 0, 6, 1, 0, 0, fill[0], anchor[5]}, {1, 1, 6, 1, 0, 0, fill[0], anchor[5]}, {0, 2, 1, 1, 0, 0, fill[0], anchor[0]}, {1, 2, 1, 1, 0, 0, fill[0], anchor[0]}, {2, 2, 1, 1, 0, 0, fill[0], anchor[0]}, {3, 2, 1, 1, 0, 0, fill[0], anchor[0]}, {4, 2, 1, 1, 0, 0, fill[0], anchor[0]}, {5, 2, 1, 1, 0, 0, fill[0], anchor[0]}, {6, 2, 1, 1, 0, 0, fill[0], anchor[0]}}; String n[] = {"Input", "Output", "hint...", "New", "Load", "Save", "Encode", "Decode", "Clear", "Copy"}; // 以下用以上的常數設定所需屬性 name = n; att = a; e = null; // null 表示指向虛無的參考 userinput = ""; result = ""; frame = new JFrame(); GUIComponent = new ArrayList<JComponent>(12); } // run() 為建立視窗的函數 public void run() { frame.setSize(600, 160); frame.setLayout(new GridBagLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 以下建立視窗元件 int i; for (i = 0; i < 3; i++) { JLabel nLabel = new JLabel(name[i]); GUIComponent.add(nLabel); } for (i = 0; i < 2; i++) { JTextField nText = new JTextField("", 32); GUIComponent.add(nText); } for (i = 3; i < 10; i++) { JButton nButton = new JButton(name[i]); GUIComponent.add(nButton); } for (i = 0; i < GUIComponent.size(); i++) { addComponent(i); } // 以下個視窗元件註冊所要處理的事件 JTextField t = (JTextField) GUIComponent.get(3); t.addActionListener(new InputListener()); t.addCaretListener(new InputListener()); t = (JTextField) GUIComponent.get(4); t.addActionListener(new OutputListener()); JButton b = (JButton) GUIComponent.get(5); b.addActionListener(new NewListener()); b = (JButton) GUIComponent.get(6); b.addActionListener(new LoadListener()); b = (JButton) GUIComponent.get(7); b.addActionListener(new SaveListener()); b = (JButton) GUIComponent.get(8); b.addActionListener(new EncodeListener()); b = (JButton) GUIComponent.get(9); b.addActionListener(new DecodeListener()); b = (JButton) GUIComponent.get(10); b.addActionListener(new ClearListener()); b = (JButton) GUIComponent.get(11); b.addActionListener(new CopyListener()); frame.setVisible(true); } // 設定 GridBagConstraints 的函數 private void addComponent(int i) { GridBagConstraints c = new GridBagConstraints(); int a[] = att[i]; c.gridx = a[0]; c.gridy = a[1]; c.gridwidth = a[2]; c.gridheight = a[3]; c.weightx = a[4]; c.weighty = a[5]; c.fill = a[6]; c.anchor = a[7]; frame.add(GUIComponent.get(i), c); } // 使用者輸入文字方塊的事件 class InputListener implements ActionListener, CaretListener { public void actionPerformed(ActionEvent event) { JTextField t2 = (JTextField) GUIComponent.get(3); userinput = t2.getText(); JLabel t1 = (JLabel) GUIComponent.get(2); t1.setText("This is Input textfield. Your input is \'" + userinput + "\'"); } public void caretUpdate(CaretEvent event) { JTextField t2 = (JTextField) GUIComponent.get(3); userinput = t2.getText(); JLabel t1 = (JLabel) GUIComponent.get(2); t1.setText("This is Input textfield. Your input is \'" + userinput + "\'"); } } // 輸出文字方塊的事件 class OutputListener implements ActionListener { public void actionPerformed(ActionEvent event) { JLabel t = (JLabel) GUIComponent.get(2); t.setText("This is Output textfield. Why do you do this?"); } } // 建立新 Encrypt 物件的事件 class NewListener implements ActionListener { public void actionPerformed(ActionEvent event) { e = new Encrypt(); JLabel t = (JLabel) GUIComponent.get(2); t.setText("This is New button. A new Encrypt object is built."); } } // 載入已儲存 Encrypt 物件檔案的事件 class LoadListener implements ActionListener { public void actionPerformed(ActionEvent event) { JLabel t1 = (JLabel) GUIComponent.get(2); JTextField t2 = (JTextField) GUIComponent.get(4); try { FileInputStream fs = new FileInputStream("encryptor.ser"); ObjectInputStream is = new ObjectInputStream(fs); e = (Encrypt) is.readObject(); is.close(); fs.close(); t1.setText("This is Load button. Encrypt object is loaded."); } catch (Exception ex) { ex.printStackTrace(); t1.setText("This is Load button. Encrypt object is not loaded."); } finally { t2.setText("after Load ....."); } } } // 儲存 Encrypt 物件檔案的事件 class SaveListener implements ActionListener { public void actionPerformed(ActionEvent event) { JLabel t1 = (JLabel) GUIComponent.get(2); JTextField t2 = (JTextField) GUIComponent.get(4); try { FileOutputStream fs = new FileOutputStream("encryptor.ser"); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(e); os.close(); fs.close(); t1.setText("This is Save button. Encrypt object is saved."); } catch (Exception ex) { ex.printStackTrace(); t1.setText("This is Save button. Encrypt object is not saved."); } finally { t2.setText("after Save ....."); } } } // 進行編碼的事件 class EncodeListener implements ActionListener { public void actionPerformed(ActionEvent event) { JLabel t1 = (JLabel) GUIComponent.get(2); JTextField t2 = (JTextField) GUIComponent.get(4); if (userinput == "") { t1.setText("This is Encode button. No input string!!"); } else { if (e == null) { t1.setText("This is Encode button. No Encrypt object!!"); } else { result = e.toEncode(userinput); t2.setText(result); t1.setText("This is Encode button. The result is above."); } } } } // 進行解碼的事件 class DecodeListener implements ActionListener { public void actionPerformed(ActionEvent event) { JLabel t1 = (JLabel) GUIComponent.get(2); JTextField t2 = (JTextField) GUIComponent.get(4); if (userinput == "") { t1.setText("This is Decode button. No input string!!"); } else { if (e == null) { t1.setText("This is Decode button. No Encrypt object!!"); } else { result = e.toDecode(userinput); t2.setText(result); t1.setText("This is Decode button. The result is above."); } } } } // 清楚文字方塊及暫存資料的事件 class ClearListener implements ActionListener { public void actionPerformed(ActionEvent event) { userinput = ""; result = ""; JTextField t2 = (JTextField) GUIComponent.get(3); t2.setText(""); JTextField t3 = (JTextField) GUIComponent.get(4); t3.setText(""); JLabel t1 = (JLabel) GUIComponent.get(2); t1.setText("This is Clear button. Your input is clear."); } } // 將輸出結果拷貝到作業系統的剪貼簿 class CopyListener implements ActionListener { public void actionPerformed(ActionEvent event) { JTextField t2 = (JTextField) GUIComponent.get(4); t2.selectAll(); t2.copy(); JLabel t1 = (JLabel) GUIComponent.get(2); t1.setText("This is Copy button. Result is copied to clipboard."); } } } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:EncryptorGUI.java 功能:示範 Java 程式 作者:張凱慶 時間:西元 2011 年 4 月 */
您可以繼續參考
範例程式碼
相關目錄
回 Java 入門指南
回 Java 教材目錄
回首頁
參考資料
The JavaTM Tutorials: Getting Started
The JavaTM Tutorials: Learning the Java Language
The JavaTM Tutorials: Essential Classes
The Java Language Specification, Third Edition
本文於 2013 年 1 月訂正
沒有留言:
張貼留言