Java語言程序設計 上機實驗6
實驗目的:
掌握Java的圖形用戶界面編程,掌握布局管理器和事件的響應方法。
實驗內容:標(*)為選做內容
- 輸入兩個整數,分別進行加、減、乘、除等算術運算,界面如下圖所示。
要求:
1) 采用Swing組件設計圖形用戶界面,采用3個文本行JTextField分別表示兩個操作數和運算結果,其中表示運算結果的文本行只能顯示,不能輸入;采用組合框JComboBox提供多種算數運算符的選擇方式,組合框只能在下拉列表中選擇,不能編輯。
2) 文本行要響應單擊事件,組合框要響應選擇事件。兩個事件處理方法執行由組合框指定的算術運算。
3) 進行異常處理。當文本行中的字符串不能轉換成整數時,彈出對話框顯示指定信息,提示用戶重新輸入。
- (*) 顯示字符串中每個字符的Unicode值,參考下圖。
提示:使用表格組件,表格大小根據字符串長度變化。
實驗要求:
1. 在實驗報告中給出程序運行結果截圖。
2. 源程序代碼附到實驗報告的最后。
3. 認真填寫實驗報告並妥善存檔,在下次上機實驗課之前發送電子版實驗報告至 wsycup@foxmail.com。
注意,“郵件標題”與“附件實驗報告文件名”均為:
Java1實驗報告N_學號_姓名
其中N為阿拉伯數字,指第幾次實驗,例如:
Java1實驗報告3_ 2012010400_李雷
請嚴格按照規定的格式發送郵件(注意標題中“Java”后的數字“1”),郵件標題不符合格式要求等同於未交作業,並在規定的時間發送實驗報告郵件,過期無效。
4. 實驗報告雷同者將不能得到相應的平時分。
附錄:實驗報告
實驗題目__實驗6_______
學號_2014011329__ 姓名_許愷____ 班級__計算機14-1__ 時間__2016.5.11____
實驗題目解答
附:源程序
package com.Test6; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Test6 extends JFrame implements ActionListener{ private JTextField tex1,tex2,fin; private JLabel jl; private MessageJDialog jd; private JComboBox box; private static String fuhao[]={"+","-","*","/"}; int i; public Test6(){ super("整數計算器"); this.setBounds(300,240,420,80); this.setResizable(false); this.setBackground(java.awt.Color.lightGray); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT)); tex1=new JTextField(10); this.getContentPane().add(tex1); tex1.setHorizontalAlignment(JTextField.LEFT); tex1.addActionListener(this); box=new JComboBox<String>(fuhao); box.addActionListener(this); box.setEditable(false); this.getContentPane().add(box); tex2=new JTextField(10); this.getContentPane().add(tex2); tex2.setHorizontalAlignment(JTextField.LEFT); tex2.addActionListener(this); jl=new JLabel("="); this.getContentPane().add(jl); jl.setHorizontalAlignment(JTextField.LEFT); fin=new JTextField(10); this.getContentPane().add(fin); fin.setHorizontalAlignment(JTextField.LEFT); fin.setEditable(false); fin.addActionListener(this); jd=new MessageJDialog(this); this.setVisible(true); } private class MessageJDialog extends JDialog { JLabel jla; JFrame Frame; MessageJDialog(JFrame Frame) { super(Frame,"警告",true); this.Frame=Frame; this.setSize(300,80); jla=new JLabel("111",JLabel.CENTER); this.getContentPane().add(jla); this.setDefaultCloseOperation(HIDE_ON_CLOSE); } void show(String message) { jla.setText(message); this.setLocation(Frame.getX()+100,Frame.getY()+100); this.setVisible(true); } } public void actionPerformed(ActionEvent a){ if(a.getSource()==box) { i=box.getSelectedIndex(); } if(a.getSource()==tex2||a.getSource()==tex1) { String str = null; try { if(i==0) { Integer x=Integer.parseInt(tex1.getText()); Integer y=Integer.parseInt(tex2.getText()); str=Integer.toString(x+y); } else if(i==1) { Integer x=Integer.parseInt(tex1.getText()); Integer y=Integer.parseInt(tex2.getText()); str=Integer.toString(x-y); } else if(i==2) { Integer x=Integer.parseInt(tex1.getText()); Integer y=Integer.parseInt(tex2.getText()); str=Integer.toString(x*y); } else if(i==3) { Integer x=Integer.parseInt(tex1.getText()); Integer y=Integer.parseInt(tex2.getText()); if(y==0) { jd.show("除數不能為0"); tex1.setText(""); tex2.setText(""); fin.setText(""); } else str=Integer.toString(x/y); } fin.setText(str); } catch(NumberFormatException e1) { jd.show("請輸入整數"); tex1.setText(""); tex2.setText(""); fin.setText(""); } finally{}; /*try{ int x=Integer.parseInt(tex1.getText()); int y=Integer.parseInt(tex2.getText()); if(box.getSelectedIndex()==0) fin.setText(Integer.toString(x+y)); if(box.getSelectedIndex()==1) fin.setText(Integer.toString(x-y)); if(box.getSelectedIndex()==2) fin.setText(Integer.toString(x*y)); if(box.getSelectedIndex()==3&&tex2.getText()!="0") fin.setText(Integer.toString(x/y)); } catch(NumberFormatException e1){ jla.show("您輸入的字符不能轉換成整型,請重新輸入!"); }*/ } } public static void main(String[] args){ // TODO Auto-generated method stub new Test6(); } }