這次的功課,老師最主要是讓我們練習寫鍵盤事件,可是老師又沒有在智慧大師上貼範例-”- 請大家同樣去看我之前分享的網址,上面都有教學唷,當然大家也可以直接連結到以下網址:http://download.oracle.com/javase/tutorial/uiswing/events/index.html
我覺得大家真的可以多玩玩Swing,個人是覺得還滿有趣的,至少像是當時在學VB一樣,會去排版一些元件,或是隨興加加自己喜歡的功能XD 這一次我寫了兩個範例,因為重複性的Label還有程式碼很多,所以我利用陣列與迴圈的方式,節省了重複性的程式碼,請各位在觀看兩段程式碼就會發現差別了。
按下「Launch」鈕,可直接操縱此次功課的程式,歡迎試試看唷!
P.S.家裡用IE可以成功執行。
執行結果:
底下分享我自己寫的部分,另外也歡迎平時有光顧我網誌的讀者,可以在底下留言自己的寫法。^-^
寫法僅供參考,畢竟Java才學不到一年吧 >”<
(大家記得註解和程式碼要自己重新打過唷,工讀生會檢查;請大家要多多修改唷,尤其在版面的樣子,這是最好改,也是最不容易被老師抓到的地方,請多下點功夫!)
程式碼第一種寫法:
import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; @SuppressWarnings("serial") public class b11967046 extends JFrame implements ActionListener, KeyListener{ /* 11967046 公版 * 請使用Swing元件設計一換鈔機, * 在JTextField元件輸入金額, * 按下Enter或一個JButton元件, * 可以顯示換成多少張1000、500、200、100元紙鈔 * 和50、10、5、1元硬幣 * (以換成最多張大面額鈔票方式進行計算), * 每一個面額對應一個JLabel元件, * 分別顯示各種面額轉換的張數或個數。 */ JLabel tip1 = new JLabel(); JLabel tip2 = new JLabel(); //宣告紀錄鈔票張數的Label JLabel thousand_lb = new JLabel(); JLabel five_hundred_lb = new JLabel(); JLabel two_hundred_lb = new JLabel(); JLabel hundred_lb = new JLabel(); JLabel fifty_lb = new JLabel(); JLabel ten_lb = new JLabel(); JLabel five_lb = new JLabel(); JLabel one_lb = new JLabel(); //宣告輸入數值的文字框和運算按鈕 JTextField pushMoney_field = new JTextField(15); JButton transform_btn = new JButton(); public b11967046(){ super("換鈔機--幫你換好最大張的面額"); Container contain = this.getContentPane(); //使用了三個Panel。因為將畫面分成上半部和下半部 //再將兩個Panel放到parent_panel中 JPanel parent_panel = new JPanel(); JPanel top_panel = new JPanel(); JPanel bottom_panel = new JPanel(); //設定為GridLayout來排版 parent_panel.setLayout(new GridLayout(2,0)); bottom_panel.setLayout(new GridLayout(0,2)); tip1.setText("換鈔機會自動幫您換好最大張的面額"); tip2.setText("換鈔的金額會顯示如下"); tip2.setBorder(BorderFactory.createMatteBorder( 2, 2, 2, 2, Color.blue)); pushMoney_field.setText("請將換鈔的金額輸入於此欄"); pushMoney_field.selectAll(); transform_btn.setText("轉換"); thousand_lb.setText("1000元紙鈔:"); five_hundred_lb.setText("500元紙鈔:"); two_hundred_lb.setText("200元紙鈔:"); hundred_lb.setText("100元紙鈔:"); fifty_lb.setText("50元紙鈔:"); ten_lb.setText("10元紙鈔:"); five_lb.setText("5元紙鈔:"); one_lb.setText("1元紙鈔:"); top_panel.add(pushMoney_field); top_panel.add(transform_btn); top_panel.add(tip1); top_panel.add(tip2); bottom_panel.add(thousand_lb); bottom_panel.add(five_hundred_lb); bottom_panel.add(two_hundred_lb); bottom_panel.add(hundred_lb); bottom_panel.add(fifty_lb); bottom_panel.add(ten_lb); bottom_panel.add(five_lb); bottom_panel.add(one_lb); parent_panel.add(top_panel); parent_panel.add(bottom_panel); contain.add(parent_panel); transform_btn.addActionListener(this); //設定文字框的鍵盤事件 pushMoney_field.addKeyListener(this); } public static void main(String[] args) { a11967046 frame = new a11967046(); frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE); frame.setSize(300,300); frame.setVisible(true); } @Override public void actionPerformed(ActionEvent arg0) { changeMoney(); } @Override public void keyPressed(KeyEvent event) { } @Override public void keyReleased(KeyEvent event) { //當鍵盤按下Enter時,觸發換鈔的事件 if(event.getKeyCode() == 10){ changeMoney(); } } @Override public void keyTyped(KeyEvent event) { } public void changeMoney(){ int amount = Integer.parseInt( pushMoney_field.getText()); int thousand = 0, five_hundred = 0, two_hundred = 0, hundred = 0, fifty = 0, ten = 0, five = 0, one = 0; int remainder = amount; if(amount <= 0){ JOptionPane.showMessageDialog(null,"您輸入了0或負值唷!","錯誤訊息>U<" ,JOptionPane.INFORMATION_MESSAGE); } else if (amount > 0){ //繁雜的計算過程 //實際上這個過程可以透過陣列搭配迴圈簡單解決 thousand = remainder / 1000; remainder = remainder % 1000; five_hundred = remainder / 500; remainder = remainder % 500; two_hundred = remainder / 200; remainder = remainder % 200; hundred = remainder / 100; remainder = remainder % 100; fifty = remainder / 50; remainder = remainder % 50; ten = remainder / 10; remainder = remainder % 10; five = remainder / 5; remainder = remainder % 5; one = remainder / 1; remainder = remainder % 1; } thousand_lb.setText("1000元紙鈔:" + thousand); five_hundred_lb.setText("500元紙鈔:" + five_hundred); two_hundred_lb.setText("200元紙鈔:" + two_hundred); hundred_lb.setText("100元紙鈔:" + hundred); fifty_lb.setText("50元紙鈔:" + fifty); ten_lb.setText("10元紙鈔:" + ten); five_lb.setText("5元紙鈔:" + five); one_lb.setText("1元紙鈔:" + one); } }程式第二種寫法:
import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; @SuppressWarnings("serial") public class a11967046 extends JFrame implements ActionListener, KeyListener{ /* 11967046 公版 * 請使用Swing元件設計一換鈔機, * 在JTextField元件輸入金額, * 按下Enter或一個JButton元件, * 可以顯示換成多少張1000、500、200、100元紙鈔 * 和50、10、5、1元硬幣 * (以換成最多張大面額鈔票方式進行計算), * 每一個面額對應一個JLabel元件, * 分別顯示各種面額轉換的張數或個數。 */ JLabel tip1 = new JLabel(); JLabel tip2 = new JLabel(); JTextField pushMoney_field = new JTextField(15); JButton transform_btn = new JButton(); int number [] = {1000,500,200,100,50,10,5,1}; ArrayList<Jlabel> GUIComponent ; public a11967046(){ super("換鈔機--幫你換好最大張的面額"); Container contain = this.getContentPane(); JPanel parent_panel = new JPanel(); JPanel top_panel = new JPanel(); JPanel bottom_panel = new JPanel(); parent_panel.setLayout(new GridLayout(2,0)); bottom_panel.setLayout(new GridLayout(0,2)); tip1.setText("換鈔機會自動幫您換好最大張的面額"); tip2.setText("換鈔的金額會顯示如下"); tip2.setBorder(BorderFactory.createMatteBorder( 2, 2, 2, 2, Color.blue)); pushMoney_field.setText("請將換鈔的金額輸入於此欄"); pushMoney_field.selectAll(); transform_btn.setText("轉換"); GUIComponent = new ArrayList<Jlabel>(); for(int i = 0; i < number.length;i++){ JLabel nLabel = new JLabel(number[i]+"元紙鈔:"); GUIComponent.add(nLabel); bottom_panel.add(GUIComponent.get(i)); } top_panel.add(pushMoney_field); top_panel.add(transform_btn); top_panel.add(tip1); top_panel.add(tip2); parent_panel.add(top_panel); parent_panel.add(bottom_panel); contain.add(parent_panel); transform_btn.addActionListener(this); pushMoney_field.addKeyListener(this); } public static void main(String[] args) { a11967046 frame = new a11967046(); frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE); frame.setSize(300,300); frame.setResizable(false); frame.setVisible(true); } @Override public void actionPerformed(ActionEvent arg0) { changeMoney(); } @Override public void keyPressed(KeyEvent event) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent event) { // TODO Auto-generated method stub if(event.getKeyCode() == 10){ changeMoney(); } } @Override public void keyTyped(KeyEvent event) { // TODO Auto-generated method stub } public void changeMoney(){ int amount = Integer.parseInt( pushMoney_field.getText()); int remainder = amount; int quantity [] = {0,0,0,0,0,0,0,0}; if(amount <= 0){ JOptionPane.showMessageDialog(null,"您輸入了0或負值唷!","錯誤訊息>U<" ,JOptionPane.INFORMATION_MESSAGE); } else if (amount > 0){ for(int i = 0;i < number.length;i++){ quantity[i] = remainder / number[i]; remainder = remainder % number[i]; } for(int i = 0;i < number.length;i++){ JLabel nLabel = GUIComponent.get(i); nLabel.setText(number[i] + "元紙鈔:" + quantity[i]); } } } }
沒有留言:
張貼留言
歡迎提供良性建議^_^