(第三修:真慘-"-這個作業在理解上的誤差,導致我已經第三次修正了,請同學們趕緊改回來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); } }
埃呀!我發現我少看一行,待會程式碼會重改唷-"-
回覆刪除