Java 簡單計算機__Java

來源:互聯網
上載者:User

計算機大家都用過,不過自己寫的還是很有情感的,今天下午完成了一個初級的計算機開發,主要鍛煉下自己對於圖形介面的設計,以及事件偵聽的寫法加以鞏固。

 

主要代碼如下:

 

 package homework; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.DataFlavor; import java.awt.event.*; import java.io.Serializable; import javax.swing.*; public class Calc extends JFrame{ JMenu edit,find,help; JMenuItem cut,copy,paste;//edit child JMenuItem standard,science;//find child JMenuItem helpItem;//help child JMenuBar menubar;//menu's father JTextField field; JButton btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn0,btnc,btnadd,btndel,btnmul,btndiv,btnas,btndot; JPanel panel1,panel2,panel3; Clipboard clipboard=null; public Calc() { super("計算器"); clipboard=getToolkit().getSystemClipboard();//擷取系統剪貼簿。 JFrame.setDefaultLookAndFeelDecorated(true); /*******************************功能表列*******************************************/ edit=new JMenu("編輯"); cut=new JMenuItem("剪下"); copy=new JMenuItem("複製"); paste=new JMenuItem("粘貼"); edit.add(cut); edit.add(copy); edit.add(paste); find=new JMenu("查看"); standard=new JMenuItem("標準"); science=new JMenuItem("科學"); find.add(standard); find.add(science); help=new JMenu("協助"); helpItem=new JMenuItem("說明主題"); help.add(helpItem); menubar=new JMenuBar(); menubar.add(edit); menubar.add(find); menubar.add(help); /*************************設定菜單的捷徑*********************************************/ edit.setMnemonic('E'); find.setMnemonic('F'); help.setMnemonic('H'); copy.setMnemonic('C'); paste.setMnemonic('V'); standard.setMnemonic('S'); science.setMnemonic('T'); panel1=new JPanel(); BorderLayout b1=new BorderLayout(); //建立邊界布局管理器 panel1.setLayout(b1); //將panel布局設定為邊界模式 panel1.add(menubar); //建立編輯框 field=new JTextField(25); field.setEditable(false); //設定編輯框為唯讀 panel2=new JPanel(); panel2.add(field); //field.setSize(40); //設定計算面板 包含按鈕。 //這部分有問題的,由於還沒有完成好看的布局,暫且放下。。。。。。。。。。。。 /*******************************按鈕設定*****************************************************/ btn0=new JButton("0"); btn1=new JButton("1"); btn2=new JButton("2"); btn3=new JButton("3"); btn4=new JButton("4"); btn5=new JButton("5"); btn6=new JButton("6"); btn7=new JButton("7"); btn8=new JButton("8"); btn9=new JButton("9"); btnadd=new JButton("+"); btndel=new JButton("-"); btnmul=new JButton("*"); btndiv=new JButton("/"); btnas=new JButton("="); btnc=new JButton("c"); btndot=new JButton("."); panel3=new JPanel(); panel3.add(btn0);panel3.add(btn1);panel3.add(btn2);panel3.add(btn3); panel3.add(btn4);panel3.add(btn5);panel3.add(btn6);panel3.add(btn7); panel3.add(btn8);panel3.add(btn9);panel3.add(btnadd);panel3.add(btndel); panel3.add(btnmul);panel3.add(btndiv);panel3.add(btnas);panel3.add(btnc); panel3.add(btndot); panel3.setLayout(new GridLayout(5,4)); //將三部分加入面板中 Container content=getContentPane(); content.add(panel1,BorderLayout.NORTH); content.add(panel2,BorderLayout.CENTER); content.add(panel3,BorderLayout.SOUTH); //getContentPane().add(panel1); //getContentPane().add(panel2); setVisible(true); setSize(300,230); /*****************************添加偵聽事件**********************************************/ CalcListener listen=new CalcListener(); copy.addActionListener(listen); paste.addActionListener(listen); standard.addActionListener(listen); science.addActionListener(listen); helpItem.addActionListener(listen); btn0.addActionListener(listen);btn1.addActionListener(listen);btn2.addActionListener(listen); btn3.addActionListener(listen);btn4.addActionListener(listen);btn5.addActionListener(listen); btn6.addActionListener(listen);btn7.addActionListener(listen);btn8.addActionListener(listen); btn9.addActionListener(listen);btnadd.addActionListener(listen);btnas.addActionListener(listen); btndiv.addActionListener(listen);btnmul.addActionListener(listen);btndel.addActionListener(listen); btnc.addActionListener(listen);btndot.addActionListener(listen); addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e) { } }); } static int count=0; double sum=0.0,sum1=0.0; static int flag=0; class CalcListener implements ActionListener { public void actionPerformed(ActionEvent e) { /**************************************以下為按鈕的事件響應*******************************/ String name=field.getText(); if(e.getSource().equals(btn0)) { if(flag==1) { field.setText(""); } field.setText(name+"0"); } if(e.getSource().equals(btn1)) { if(flag==1) { field.setText(""); } field.setText(name+"1"); } if(e.getSource().equals(btn2)) { if(flag==1) { field.setText(""); } field.setText(name+"2"); } if(e.getSource().equals(btn3)) { if(flag==1) { field.setText(""); } field.setText(name+"3"); } if(e.getSource().equals(btn4)) { if(flag==1) { field.setText(""); } field.setText(name+"4"); } if(e.getSource().equals(btn4)) { if(flag==1) { field.setText(""); } field.setText(name+"4"); } if(e.getSource().equals(btn5)) { if(flag==1) { field.setText(""); } field.setText(name+"5"); } if(e.getSource().equals(btn6)) { if(flag==1) { field.setText(""); } field.setText(name+"6"); } if(e.getSource().equals(btn7)) { if(flag==1) { field.setText(""); } field.setText(name+"7"); } if(e.getSource().equals(btn8)) { if(flag==1) { field.setText(""); } field.setText(name+"8"); } if(e.getSource().equals(btn9)) { if(flag==1) { field.setText(""); } field.setText(name+"9"); } if(e.getSource().equals(btndot))//小數點 { if(flag==1) { field.setText(""); } field.setText(name+"."); } if(e.getSource().equals(btnadd))//加法運算 { sum=Double.valueOf(field.getText()); field.setText(""); count=0; } if(e.getSource().equals(btndel))//減法運算 { sum=Double.valueOf(field.getText()); field.setText(""); count=1; } if(e.getSource().equals(btndiv))//除法運算 { sum=Double.valueOf(field.getText()); field.setText(""); count=2; } if(e.getSource().equals(btnmul))//乘法運算 { sum=Double.valueOf(field.getText()); field.setText(""); count=3; } if(e.getSource().equals(btnas))//等號運算*********************這個有毛病的 { sum1=Double.valueOf(field.getText()); switch(count) { case 0: sum+=sum1; break; case 1: sum-=sum1; break; case 2: sum/=sum1; break; case 3: sum*=sum1; break; } field.setText(String.valueOf(sum)); sum=0.0; sum1=0.0; name=""; flag=1;//這裡的好像不管用哎。。。鬱悶啊,不知道怎麼在計算結果後把文字框清空,上面寫的都不管用 //真的很惱人啊,還好毛病不大,慢慢加油 } if(e.getSource().equals(btnc))//清空運算 { field.setText(""); } /*******************************菜單的偵聽事件**************************************/ if(e.getActionCommand().equals("剪下")) { // String temp=field.getSelectedText(); //拖動滑鼠選取文本。 // StringSelection text=new StringSelection(temp); // clipboard.setContents(text,null); // int start=field.getSelectionStart(); // int end =field.getSelectionEnd(); // field.setText(temp.substring(start, end)) ; //從field中刪除被選取的文本。 } if(e.getActionCommand().equals("複製")) { String temp=field.getText(); Transferable tText = new StringSelection(temp); //把String類型轉換為 Transferable clipboard.setContents(tText, null); // 設定剪下板中的內容 } if(e.getActionCommand().equals("粘貼")) { Transferable contents=clipboard.getContents(this); DataFlavor flavor= DataFlavor.stringFlavor; if( contents.isDataFlavorSupported(flavor)) { try{ String str; str=(String)contents.getTransferData(flavor); field.setText(str); }catch(Exception ee) {} } } } /*測試用的 * private void showMsg(String sMsg) { JOptionPane.showMessageDialog(null, sMsg); }*/ } public static void main(String[] args) { // TODO Auto-generated method stub new Calc(); } } 針對以上代碼我加以闡述,主要就是粘貼板的書寫: import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.DataFlavor; Clipboard clipboard=null; clipboard=getToolkit().getSystemClipboard();//擷取系統剪貼簿。 對於String 轉換為 Transferable 可以主要參考下面的程式,網上找的加上我改的,很管用了 if(e.getActionCommand().equals("複製")) { String temp=field.getText(); Transferable tText = new StringSelection(temp); //把String類型轉換為 Transferable clipboard.setContents(tText, null); // 設定剪下板中的內容 } if(e.getActionCommand().equals("粘貼")) { Transferable contents=clipboard.getContents(this); DataFlavor flavor= DataFlavor.stringFlavor; if( contents.isDataFlavorSupported(flavor)) { try{ String str; str=(String)contents.getTransferData(flavor); field.setText(str); }catch(Exception ee) {} } }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.