Java 简单计算器
2010-10-07 18:56
183 查看
计算器大家都用过,不过自己写的还是很有情感的,今天下午完成了一个初级的计算器开发,主要锻炼下自己对于图形界面的设计,以及事件侦听的写法加以巩固。
主要代码如下:
主要代码如下:
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) {} } }
相关文章推荐
- JavaWeb学习记录(二十)——Model1模式(javaBean+jsp)实现简单计算器案例
- java基础语言写简单计算器
- [代码记录]java简单计算器的操作类函数封装
- JAVA实现简单计算器
- java实现简单计算器
- java用类和方法的方式写的简单计算器
- Java实现简单计算器
- Java swing实现简单计算器的开发
- 简单计算器java源码
- java 简单计算器
- java笔记004之 简单计算器
- java简单计算器
- 分享一个java写的简单计算器
- Java实现简单计算器
- Java实现简单计算器
- 简单计算器 java实现hdu1237
- Java源码-简单计算器界面的AWT实现与Swing实现之比较
- java 杭电1237简单计算器
- java简单计算器
- Java实现一个简单计算器