(第三修:真慘-"-這個作業在理解上的誤差,導致我已經第三次修正了,請同學們趕緊改回來QQ)
這次老師的要求,感覺比較具有即時性,至少當你在打入數字和打勾時,就能馬上計算出價錢;前幾次功課也特別寫了一個「即時運算」的功能,沒想到這次功課就出了一個類似的題目!
這次老師的要求,感覺比較具有即時性,至少當你在打入數字和打勾時,就能馬上計算出價錢;前幾次功課也特別寫了一個「即時運算」的功能,沒想到這次功課就出了一個類似的題目!
另外我在查找資料的過程,也搜尋到一個不錯的網誌,分享給各位參考參考;寫這個教學網誌的Blog主也真是夠好心呀!看到他寫的程式碼也真的讓我多學到很多東西。
程式語言教學誌:
程式語言教學誌--Java 入門指南 - GUI 的基本概念:
程式語言教學誌-- Java 入門指南 - 排版管理員:
程式語言教學誌-- Java 入門指南 – GridBagLayout:
之後還有很多很多系列的文章…就請大家自行前往嘍~~
按下「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.Box;
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, KeyListener{
/* 11967046 公版
* 請建立光碟燒錄片的訂購程式,
* 使用JCheckBox元件勾選購買哪一種光碟片,
* 即可在JLabel元件顯示總片數和總價(不需使用JButton元件)
* 訂購單位為50片,白金片每片3元、金片4元、水藍片5元,DVD片7元
* 其後擁有JTextField輸入每種燒錄片的訂購數量(預設值為50)
* 不足50片則以50片計。
*/
JLabel tip_lb = new JLabel();
JLabel tip2_lb = new JLabel();
JLabel sum_lb = new JLabel();
JCheckBox platinumDisc_box = new JCheckBox();
JCheckBox goldDisc_box = new JCheckBox();
JCheckBox seafoamDisc_box = new JCheckBox();
JCheckBox digitalVersatileDisc_box = new JCheckBox();
JTextField platinumDisc_tf = new JTextField();
JTextField goldDisc_tf = new JTextField();
JTextField seafoamDisc_tf = new JTextField();
JTextField digitalVersatileDisc_tf = new JTextField();
public a11967046(){
super("光碟燒錄片訂購程式");
Container contain = this.getContentPane();
//這是BoxLayout,將排版方式設定為垂直放置
Box parent_panel = Box.createVerticalBox();
JPanel top_panel = new JPanel();
JPanel bottom_panel = new JPanel();
bottom_panel.setLayout(new GridLayout(0,2));
tip_lb.setText("請勾選光碟片種類,並在輸入框內輸入數量。" );
tip2_lb.setText("若是您的訂購不足50片,將以50片價格計算");
sum_lb.setText("總價為");
sum_lb.setBorder(BorderFactory.createMatteBorder(
2, 2, 2, 2, Color.blue));
platinumDisc_box.setText("白金片/3元");
goldDisc_box.setText("金片/4元");
seafoamDisc_box.setText("水藍片/5元");
digitalVersatileDisc_box.setText("DVD/7元");
platinumDisc_tf.setText("50");
goldDisc_tf.setText("50");
seafoamDisc_tf.setText("50");
digitalVersatileDisc_tf.setText("50");
top_panel.add(tip_lb);
top_panel.add(tip2_lb);
top_panel.add(sum_lb);
bottom_panel.add(platinumDisc_box);
bottom_panel.add(goldDisc_box);
bottom_panel.add(platinumDisc_tf);
bottom_panel.add(goldDisc_tf);
bottom_panel.add(seafoamDisc_box);
bottom_panel.add(digitalVersatileDisc_box);
bottom_panel.add(seafoamDisc_tf);
bottom_panel.add(digitalVersatileDisc_tf);
parent_panel.add(top_panel);
parent_panel.add(bottom_panel);
contain.add(parent_panel);
//替checkbox和textfield增加事件
//也是這次功課的核心重點
platinumDisc_box.addActionListener(this);
goldDisc_box.addActionListener(this);
seafoamDisc_box.addActionListener(this);
digitalVersatileDisc_box.addActionListener(this);
platinumDisc_tf.addKeyListener(this);
goldDisc_tf.addKeyListener(this);
seafoamDisc_tf.addKeyListener(this);
digitalVersatileDisc_tf.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 event) {
countDiscPrice();
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
countDiscPrice();
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void countDiscPrice(){
//宣告計算總數的變數
int sum = 0;
//當四個checkbox有被選取到時,才會把價格加進sum變數中
if(platinumDisc_box.isSelected() == true){
int platinumDisc_quantity =
Integer.parseInt(platinumDisc_tf.getText());
if(platinumDisc_quantity <= 50){
sum += 50*3;
}
else{
sum += platinumDisc_quantity*3;
}
}
if(goldDisc_box.isSelected() == true){
int goldDisc_quantity =
Integer.parseInt(goldDisc_tf.getText());
if(goldDisc_quantity <= 50){
sum += 50*4;
}
else{
sum += goldDisc_quantity*4;
}
}
if(seafoamDisc_box.isSelected() == true){
int seafoamDisc_quantity =
Integer.parseInt(seafoamDisc_tf.getText());
if(seafoamDisc_quantity <= 50){
sum += 50*4;
}
else{
sum += seafoamDisc_quantity*4;
}
}
if(digitalVersatileDisc_box.isSelected() == true){
int digitalVersatileDisc_quantity =
Integer.parseInt(digitalVersatileDisc_tf.getText());
if(digitalVersatileDisc_quantity <= 50){
sum += 50*4;
}
else{
sum += digitalVersatileDisc_quantity*4;
}
}
sum_lb.setText("總價為" + sum);
}
}

埃呀!我發現我少看一行,待會程式碼會重改唷-"-
回覆刪除