同樣是一個差別度不大的功課,讓同學練習用一下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 + "元");
}
}
}
}

沒有留言:
張貼留言
歡迎提供良性建議^_^