同樣是一個差別度不大的功課,讓同學練習用一下CheckBox,只要使用isSelected就可以判斷CheckBox是否有被按下,另外CheckBox也有另一個監聽事件itemStateChanged,當按鈕發生變化時就會觸發,各位同學可以利用這個事件來發揮出更多不同的創意唷。
筆者自己初學Swing時,也都是看Java的官方文件,如果有還不知道的同學,趕快上去看看,先把上面介紹的元件都基本摸熟了,那你要考期末考應該是沒問題了XD不過這對於有興趣了解Swing的同學應該是不足的,這個時候真的要多去看一些書,就可以學到其他作者的想法,以後有東西會繼續跟大家分享。
http://download.oracle.com/javase/tutorial/uiswing/components/index.html
按下「Launch」鈕,可直接操縱此次功課的程式,歡迎試試看唷!
P.S.家裡用IE可以成功執行。
執行結果:
底下分享我自己寫的部分,另外也歡迎平時有光顧我網誌的讀者,可以在底下留言自己的寫法。^-^
寫法僅供參考,畢竟Java才學不到一年吧 >”<
(大家記得註解和程式碼要自己重新打過唷,工讀生會檢查;變數名稱和註解內容記得也要修改掉唷)
程式碼:
import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; @SuppressWarnings("serial") public class a11967046 extends JFrame implements ActionListener{ /* s11967046 公版 * 請設計一個Swing應用程式來計算計程車的車資。 * 1. JTextField可以輸入里程數。 * 2. JCheckBox元件勾選是否夜間加成(夜間加成20%)。 * 3. 按下JButton元件可以計算車資 * 且在一JLabel元件顯示 里程數在1500公尺內是80元 * 每多跑500公尺加5元,如果不足500公尺以500公尺價錢計算 * 夜間加成20%。 */ JPanel panel = new JPanel(); //新增一個Panel容器 JCheckBox night_box = new JCheckBox(); //新增「夜間加成」選項 JButton count_btn = new JButton(); //新增「計算」的按鈕 JLabel label = new JLabel(); //新增顯示結果文字標籤 JTextField field = new JTextField(20); //新增一個文字框 public a11967046(){ //設定應用程式的標題 super("計程車車資計算器"); //取得視窗容器 Container c = this.getContentPane(); //設定文字框內訊息 field.setText("請於此輸入里程數"); //全選文字框,方便使用者更改 field.selectAll(); //設定按鈕文字 count_btn.setText("計算車資"); //設定文字標籤提示訊息 label.setText("此處列出計算結果"); //設定CheckBox文字 night_box.setText("夜間加成"); //將物件加入Panel中 panel.add(field); panel.add(count_btn); panel.add(label); panel.add(night_box); //將Panel加入Container中 c.add(panel); //建立按鈕的監聽事件,呼叫自己這個的類別,去實作ActionListener //和一個actionPerformed方法 count_btn.addActionListener(this); } public static void main(String[] args) { a11967046 frame = new a11967046(); //設定frame的關閉事件為DISPOSE_ON_CLOSE: //將本視窗的系統資源釋放掉,等到所有視窗都被Dispose時, //則關閉應用程式 frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //設定frame的Size frame.setSize(300,150); //設定frame為可見 frame.setVisible(true); } @Override public void actionPerformed(ActionEvent event) { double sum = 0; //乘客需要付款的總額 int count = 0; //當里程數不足500時,用來計算的變數 //取得里程數 int mile = Integer.parseInt(field.getText()); //當「夜間加成」的按鈕被選取時,所有的總價需乘以20% if (night_box.isSelected()){ //假設里程數低於1500 if(mile <= 1500){ sum = 80 * 1.2; label.setText("乘客需付" + sum + "元"); } //假設里程數可以被整除 else if(mile%500 != 0){ //使用For迴圈計算里程數的價錢 //先扣除1500後,再計算可以被500除幾次 //類似整數除法 for (int i = mile-1500 ; i>=0; i-=500){ count++; } sum = (80 + count*5)*1.2; label.setText("乘客需付" + sum + "元"); } //當里程數大於1500且又不能被500整除 //會落入這個階段,這時直接將里程數扣掉1500 //並且除以500得出的數字乘以5元即可 else{ sum = (80 + (mile-1500)/500*5)*1.2; label.setText("乘客需付" + sum + "元"); } } //以下類同,僅差20%加成 else{ if(mile <= 1500){ sum = 80; label.setText("乘客需付" + sum + "元"); } else if(mile%500 != 0){ for (int i = mile-1500 ; i>=0; i-=500){ count++; } sum = 80 + count*5; label.setText("乘客需付" + sum + "元"); } else{ sum = (80 + (mile-1500)/500*5); label.setText("乘客需付" + sum + "元"); } } } }
沒有留言:
張貼留言
歡迎提供良性建議^_^