学java第二学期 在使用jbuilder 但书上的代码断断续续 看不太懂 所以来论坛里求助
解决方案 »
- 请问如何修改java程序的进程名啊?
- 关于javax.swing.text.html.HTMLEditorKit.ParserCallBack 里方法用法
- 下载了一个java 神经网络工具包,但不知道如何使用,高手请进
- 【请问】在java中如何看字符串的地址
- 请教如何通过swing写的窗口界面打开一个IE页面
- [求助]请问哪有像outlook的calendar那样的订计划的swing组件?
- 关于java文件读写的问题(在线等)
- readLine问题??
- 哪儿有Java深度历险电子版 下载呀
- 加载jdbc驱动有那些方式.......
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
- 如何通过并口转USB口线,往打印机发送ESC/POS指令
很惭愧,我这学期才接触Java(也就是刚好两个月),但是我觉得真要把一种语言学好的话始终是要自己动手的,否则即使你看再多的代码,找再多的人帮你也于事无补
一起加油吧
public void this_keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_NUMPAD0)
JOptionPane.showMessageDialog(this,"你按下了键盘上的数字0");
else if(e.getKeyCode()==KeyEvent.VK_NUMPAD1)
JOptionPane.showMessageDialog(this,"你按下了键盘上的数字1");
// else if(.......)
}
import java.io.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class Calculator implements ActionListener,KeyListener{
public static void main(String args[]) {
new Calculator();
}
JFrame frame;
JTextField textAnswer;
JTextArea help;
JPanel panel,panel1,panel2,panel3,panel4;
JButton button[];
JButton buttonAdd,buttonEqual,buttonDot,buttonSub,buttonDiv,buttonMul;
JButton buttonBk, buttonCe, buttonC;
double num1,num2;
double answer;
boolean intflag=true;
boolean operatorflag=true;
boolean equalflag=true;
int key;
DecimalFormat df;
public Calculator() {
df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值)
frame = new JFrame("LT.的计算器");
frame.setResizable(false);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = (dim.width)/2-150;
int y = (dim.height)/2-250;
frame.setLocation(x,y); //设置窗口位置
panel=new JPanel();
textAnswer=new JTextField(15);
textAnswer.setText("");
textAnswer.setHorizontalAlignment(SwingConstants.RIGHT);
textAnswer.setEditable(false);
textAnswer.setBackground(new Color(255,255,255));
textAnswer.addKeyListener(this);
frame.getContentPane().add(panel);
panel.setLayout(new BorderLayout());
panel2=new JPanel();
panel4=new JPanel();
panel.add(panel4,BorderLayout.CENTER);
panel4.setLayout(new BorderLayout());
panel3=new JPanel();
panel4.add(panel3,BorderLayout.CENTER);
buttonBk=new JButton("BackSpace");
panel3.add(buttonBk);
buttonBk.addActionListener(this);
buttonBk.addKeyListener(this);
buttonCe=new JButton("CE");
panel3.add(buttonCe);
buttonCe.addActionListener(this);
buttonCe.addKeyListener(this);
buttonC=new JButton("C");
panel3.add(buttonC);
buttonC.addActionListener(this);
buttonC.addKeyListener(this);
panel.add(textAnswer,BorderLayout.NORTH);
panel.add(panel2,BorderLayout.WEST); panel1=new JPanel();
panel4.add(panel1,BorderLayout.SOUTH);
button = new JButton[10];
for (int i = 0; i < button.length; i++) {
button[i] = new JButton(Integer.toString(i));
button[i].setForeground(new Color(0, 0, 255));
}
buttonAdd=new JButton("+");
buttonSub=new JButton("-");
buttonDiv=new JButton("/");
buttonMul=new JButton("*");
buttonDot=new JButton(".");
buttonEqual=new JButton("=");
panel1.setLayout(new GridLayout(4,4));
panel1.add(button[7]);
button[7].addActionListener(this);
button[7].addKeyListener(this);
panel1.add(button[8]);
button[8].addActionListener(this);
button[8].addKeyListener(this);
panel1.add(button[9]);
button[9].addActionListener(this);
button[9].addKeyListener(this);
panel1.add(buttonAdd);
buttonAdd.addActionListener(this);
buttonAdd.addKeyListener(this);
panel1.add(button[4]);
button[4].addActionListener(this);
button[4].addKeyListener(this);
panel1.add(button[5]);
button[5].addActionListener(this);
button[5].addKeyListener(this);
panel1.add(button[6]);
button[6].addActionListener(this);
button[6].addKeyListener(this);
panel1.add(buttonSub);
buttonSub.addActionListener(this);
panel1.add(button[1]);
button[1].addActionListener(this);
button[1].addKeyListener(this);
panel1.add(button[2]);
button[2].addActionListener(this);
button[2].addKeyListener(this);
panel1.add(button[3]);
button[3].addActionListener(this);
button[3].addKeyListener(this);
panel1.add(buttonMul);
buttonMul.addActionListener(this);
buttonMul.addKeyListener(this);
panel1.add(button[0]);
button[0].addActionListener(this);
button[0].addKeyListener(this);
panel1.add(buttonDot);
buttonDot.addActionListener(this);
buttonDot.addKeyListener(this);
panel1.add(buttonEqual);
buttonEqual.addActionListener(this);
buttonEqual.addKeyListener(this);
panel1.add(buttonDiv);
buttonDiv.addActionListener(this);
buttonDiv.addKeyListener(this);
//buttonAdd.setFocusable(true);
frame.addKeyListener(this);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
}
public void keyPressed(KeyEvent e){
int i=e.getKeyCode();
char c=e.getKeyChar();
if(i==KeyEvent.VK_ADD){
Add();
}
else if(i==KeyEvent.VK_SUBTRACT){
Sub();
}
else if(i==KeyEvent.VK_DIVIDE){
Div();
}
else if(i==KeyEvent.VK_MULTIPLY){
Mul();
}
else if(i==KeyEvent.VK_ENTER){
Enter();
}
else if(c=='.'){
Dot();
}
else if(i==KeyEvent.VK_BACK_SPACE){
Backspace();
}
else if(i==KeyEvent.VK_Q){
clear();
}
Input(c);
}
public void keyReleased(KeyEvent e) {
// TODO 自动生成方法存根
}
public void keyTyped(KeyEvent e) {
// TODO 自动生成方法存根
}
//设置各个按钮行为
public void actionPerformed(ActionEvent event) {
Object temp = event.getSource();
//boolean operatorflag=true;
if(temp==KeyStroke.getKeyStroke('f')){
temp=button[1];
}
try{
for(int i=0;i<10;i++)
Input(temp,i);
if(temp==buttonAdd||temp==buttonMul||temp==buttonDiv||temp==buttonSub){
if(temp==buttonAdd){
Add();
}
if(temp==buttonSub){
Sub();
}
if(temp==buttonMul){
Mul();
}
if(temp==buttonDiv){
Div();
}
}
if(temp==buttonEqual){
Enter();
}
if(temp==buttonC){
clear();
}
if(temp==buttonBk){
Backspace();
}
if(temp==buttonDot){
Dot();
} }
catch(Exception e){
textAnswer.setText("非法操作");
}
}
public void culcator(Exception e){
}
public void Input(char c){
int i=c-48;
if(i<0||i>9)
return;
if(operatorflag&&equalflag){
textAnswer.setText(textAnswer.getText()+Integer.toString(i));
frame.setTitle(frame.getTitle()+Integer.toString(i));
}
else if(operatorflag==false&&!equalflag){
textAnswer.setText("");
textAnswer.setText(textAnswer.getText()+Integer.toString(i));
frame.setTitle("LT.的计算器"+Integer.toString(i));
operatorflag=true;
equalflag=true;
}
else if(operatorflag&&!equalflag){
textAnswer.setText("");
equalflag=true;
textAnswer.setText(textAnswer.getText()+Integer.toString(i));
frame.setTitle(frame.getTitle()+Integer.toString(i));
}
}
public void Input(Object temp,int i){
if(temp==button[i]&&operatorflag&&equalflag){
textAnswer.setText(textAnswer.getText()+Integer.toString(i));
frame.setTitle(frame.getTitle()+Integer.toString(i));
}
else if(temp==button[i]&&operatorflag==false&&!equalflag){
textAnswer.setText("");
textAnswer.setText(textAnswer.getText()+Integer.toString(i));
frame.setTitle("LT.的计算器"+Integer.toString(i));
operatorflag=true;
equalflag=true;
}
else if(temp==button[i]&&operatorflag&&!equalflag){
textAnswer.setText("");
equalflag=true;
textAnswer.setText(textAnswer.getText()+Integer.toString(i));
frame.setTitle(frame.getTitle()+Integer.toString(i));
}
}
public void Add(){
if(intflag==true){
num1=Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("+");
operatorflag=true;
equalflag=false;
key=1;
if(answer==0)
frame.setTitle("LT.的计算器"+df.format(num1)+"+");
}
public void Sub(){
if(intflag==true){
num1=Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("-");
operatorflag=true;
equalflag=false;
key=2;
if(answer==0)
frame.setTitle("LT.的计算器"+df.format(num1)+"-");
}
public void Div(){
if(intflag==true){
num1=Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("/");
operatorflag=true;
equalflag=false;
key=4;
if(answer==0)
frame.setTitle("LT.的计算器"+df.format(num1)+"/");
}
public void Mul(){
if(intflag==true){
num1=Double.parseDouble(textAnswer.getText());
}
textAnswer.setText("*");
operatorflag=true;
equalflag=false;
key=3;
if(answer==0)
frame.setTitle("LT.的计算器"+df.format(num1)+"*");
}
public void Enter(){
num2=Double.parseDouble(textAnswer.getText());
char c='+';
switch(key){
case 1:
answer=num1+num2;
textAnswer.setText(df.format(answer));
operatorflag=false;
equalflag=false;
c='+';
break;
case 2:
answer=num1-num2;
textAnswer.setText(df.format(answer));
operatorflag=false;
equalflag=false;
c='-';
break;
case 3:
answer=num1*num2;
textAnswer.setText(df.format(answer));
operatorflag=false;
equalflag=false;
c='*';
break;
case 4:
answer=num1/num2;
textAnswer.setText(df.format(answer));
operatorflag=false;
equalflag=false;
c='/';
break;
}
double n1=num1;
double n2=num2;
num2=0;
num1=answer;
answer=0;
frame.setTitle("LT.的计算器"+df.format(n1)+c+df.format(n2)+"="+df.format(num1));
}
public void Dot(){
boolean isDot=false;
for(int i=0;i<textAnswer.getText().length();i++){
if('.'==textAnswer.getText().charAt(i)){
isDot=true;
break;
}
}
if(isDot==false){
textAnswer.setText(textAnswer.getText()+".");
frame.setTitle(frame.getTitle()+".");
}
}
public void Backspace(){
String s = textAnswer.getText();
String t=frame.getTitle();
frame.setTitle("");
textAnswer.setText("");
for (int i = 0; i < s.length() - 1; i++) {
char a = s.charAt(i);
textAnswer.setText(textAnswer.getText() + a);
}
if(t.length()>7){
for(int i=0;i<t.length()-1;i++){
char b=t.charAt(i);
frame.setTitle(frame.getTitle()+b);
}
}
else{
frame.setTitle("LT.的计算器");
}
}
public void clear(){
textAnswer.setText("0");
num1=0;
num2=0;
answer=0;
operatorflag=true;
equalflag=false;
frame.setTitle("LT.的计算器");
} }
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.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Calculator extends JFrame implements ActionListener, KeyListener {
private JTextField display = new JTextField("0");
// 按钮上的文字
private String buttonText = "789/456*123-0.=+";
// 用来存放按钮对象
private JButton[] btns = new JButton[16]; private double result = 0; private String operator = "="; private boolean calculating = true; public Calculator() {
setLayout(new BorderLayout()); display.setEditable(false);
add(display, "North"); JPanel p = new JPanel();
p.setLayout(new GridLayout(4, 4));
p.setLayout(new GridLayout(4, 4));
for (int i = 0; i < buttonText.length(); i++) {
JButton b = new JButton(buttonText.substring(i, i + 1));
p.add(b);
b.addActionListener(this);
b.addKeyListener(this);
btns[i] = b;
}
add(p, "Center");
this.setFocusable(true);
this.addKeyListener(this); } public void actionPerformed(ActionEvent evt) {
String cmd = evt.getActionCommand();
if ('0' <= cmd.charAt(0) && cmd.charAt(0) <= '9' || cmd.equals(".")) {
if (calculating)
display.setText(cmd);
else
display.setText(display.getText() + cmd);
calculating = false;
} else {
if (calculating) {
if (cmd.equals("-")) {
display.setText(cmd);
calculating = false;
} else
operator = cmd;
} else {
double x = Double.parseDouble(display.getText());
calculate(x);
operator = cmd;
calculating = true;
}
}
} private void calculate(double n) {
if (operator.equals("+"))
result += n;
else if (operator.equals("-"))
result -= n;
else if (operator.equals("*"))
result *= n;
else if (operator.equals("/"))
result /= n;
else if (operator.equals("="))
result = n;
display.setText("" + result);
} // 当小键盘按键按下时
public void keyPressed(KeyEvent e) {
for (JButton btn : btns) {
// 当按下小键盘的回车时,执行”=“
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
btns[14].doClick();
return;
}
if (btn.getText().equals(String.valueOf(e.getKeyChar()))) {
btn.doClick();
}
}
} public void keyReleased(KeyEvent e) {
} public void keyTyped(KeyEvent e) {
} public static void main(String[] args) {
Calculator frame = new Calculator();
frame.setTitle("Calculator");
frame.setSize(200, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我以前写的一个计算器,可以参考下,O(∩_∩)O~
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.io.*;
public class CalculatorWindow extends JFrame implements ActionListener{
NumberButton numberButton[];
OperationButton operationButton[];
JButton 小数点操作,正负号操作,退格操作,等号操作,清零操作,sin;
JTextField resultShow; //显示计算结果
JTextField showComputerProcess; //显示当前计算过程
JTextArea saveComputerProcess; //显示计算步骤
JButton saveButton,copyButton,clearButton;
LinkedList<String> list; //链表用来存放第一个运算数、运算符号和第二个运算数
HandleDigit handleDigit; //负责处理ActionEvent事件
HandleOperation handleOperation ;
HandleBack handleBack;
HandleClear handleClear;
HandleEquality handleEquality;
HandleDot handleDot;
HandlePOrN handlePOrN;
HandleSin handleSin;
public CalculatorWindow(){
setTitle("计算器");
JPanel panelLeft,panelRight;
list=new LinkedList<String>();
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimesRoman",Font.BOLD,16));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
resultShow.setEditable(false);
resultShow.setBackground(Color.white);
showComputerProcess=new JTextField();
showComputerProcess.setHorizontalAlignment(JTextField.CENTER);
showComputerProcess.setFont(new Font("Arial",Font.BOLD,16));
showComputerProcess.setBackground(Color.cyan);
showComputerProcess.setEditable(false);
saveComputerProcess=new JTextArea();
saveComputerProcess.setEditable(false);
saveComputerProcess.setFont(new Font("宋体",Font.PLAIN,16));
numberButton=new NumberButton[10];
handleDigit=new HandleDigit(list,resultShow,showComputerProcess);
for(int i=0;i<=9;i++){
numberButton[i]=new NumberButton(i);
numberButton[i].setFont(new Font("Arial",Font.BOLD,20));
numberButton[i].addActionListener(handleDigit);
}
operationButton=new OperationButton[4];
handleOperation=new HandleOperation(list,resultShow,
showComputerProcess,saveComputerProcess);
String 运算符号[]={"+","-","*","/"};
for(int i=0;i<4;i++){
operationButton[i]=new OperationButton(运算符号[i]);
operationButton[i].setFont(new Font("Arial",Font.BOLD,20));
operationButton[i].addActionListener(handleOperation);
}
小数点操作=new JButton(".");
handleDot=new HandleDot(list,resultShow,showComputerProcess);
小数点操作.addActionListener(handleDot);
正负号操作=new JButton("+/-");
handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess);
正负号操作.addActionListener(handlePOrN);
等号操作=new JButton("=");
handleEquality=new HandleEquality(list,resultShow,
showComputerProcess,saveComputerProcess);
等号操作.addActionListener(handleEquality);
sin=new JButton("sin");
handleSin=new HandleSin(list,resultShow,
showComputerProcess,saveComputerProcess);
sin.addActionListener(handleSin);
退格操作=new JButton("退格");
handleBack=new HandleBack(list,resultShow,showComputerProcess);
退格操作.addActionListener(handleBack);
清零操作=new JButton("C");
handleClear=new HandleClear(list,resultShow,showComputerProcess);
清零操作.addActionListener(handleClear);
清零操作.setForeground(Color.red);
退格操作.setForeground(Color.red);
等号操作.setForeground(Color.red);
sin.setForeground(Color.blue);
正负号操作.setForeground(Color.blue);
小数点操作.setForeground(Color.blue);
panelLeft=new JPanel();
panelRight=new JPanel();
panelLeft.setLayout(new BorderLayout());
JPanel centerInLeft=new JPanel();
panelLeft.add(resultShow,BorderLayout.NORTH);
panelLeft.add(centerInLeft,BorderLayout.CENTER);
centerInLeft.setLayout(new GridLayout(4,5));
centerInLeft.add(numberButton[1]);
centerInLeft.add(numberButton[2]);
centerInLeft.add(numberButton[3]);
centerInLeft.add(operationButton[0]);
centerInLeft.add(清零操作);
centerInLeft.add(numberButton[4]);
centerInLeft.add(numberButton[5]);
centerInLeft.add(numberButton[6]);
centerInLeft.add(operationButton[1]);
centerInLeft.add(退格操作);
centerInLeft.add(numberButton[7]);
centerInLeft.add(numberButton[8]);
centerInLeft.add(numberButton[9]);
centerInLeft.add(operationButton[2]);
centerInLeft.add(sin);
centerInLeft.add(numberButton[0]);
centerInLeft.add(正负号操作);
centerInLeft.add(小数点操作);
centerInLeft.add(operationButton[3]);
centerInLeft.add(等号操作);
panelRight.setLayout(new BorderLayout());
panelRight.add(showComputerProcess,BorderLayout.NORTH);
saveButton=new JButton("保存");
copyButton=new JButton("复制");
clearButton=new JButton("清除");
saveButton.setToolTipText("保存计算过程到文件");
copyButton.setToolTipText("复制选中的计算过程");
clearButton.setToolTipText("清除计算过程");
saveButton.addActionListener(this);
copyButton.addActionListener(this);
clearButton.addActionListener(this);
panelRight.add(new JScrollPane(saveComputerProcess),BorderLayout.CENTER);
JPanel southInPanelRight=new JPanel();
southInPanelRight.add(saveButton);
southInPanelRight.add(copyButton);
southInPanelRight.add(clearButton);
panelRight.add(southInPanelRight,BorderLayout.SOUTH);
JSplitPane split=new JSplitPane
(JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight);
add(split,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(100,50,528,258);
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==copyButton)
saveComputerProcess.copy();
if(e.getSource()==clearButton)
saveComputerProcess.setText(null);
if(e.getSource()==saveButton){
JFileChooser chooser=new JFileChooser();
int state=chooser.showSaveDialog(null);
File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){
try{ String content=saveComputerProcess.getText();
StringReader read=new StringReader(content);
BufferedReader in= new BufferedReader(read);
FileWriter outOne=new FileWriter(file);
BufferedWriter out= new BufferedWriter(outOne);
String str=null;
while((str=in.readLine())!=null){
out.write(str);
out.newLine();
}
in.close();
out.close();
}
catch(IOException e1){}
}
}
}
public static void main(String args[]){
new CalculatorWindow();
}
}
import javax.swing.*;
import java.awt.event.*;
public class HandleBack implements ActionListener{
LinkedList<String> list;
JTextField resultShow,showComputerProcess;
HandleBack(LinkedList<String> list,JTextField t1,JTextField t2){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1){
String num=(String)list.getFirst();
if(num.length()>=1){
num=num.substring(0,num.length()-1);
list.set(0,num);
resultShow.setText(num);
showComputerProcess.setText(""+num);
}
else{
list.removeLast();
resultShow.setText("0");
showComputerProcess.setText("0");
}
}
else if(list.size()==3){
String num=(String)list.getLast();
if(num.length()>=1){
num=num.substring(0,num.length()-1);
list.set(2,num);
resultShow.setText(num);
showComputerProcess.setText(num);
}
else{
list.removeLast();
resultShow.setText("0");
showComputerProcess.setText("0");
}
}
}
}
import java.awt.event.*;
import java.math.BigDecimal;
import javax.swing.*;//创建计算器Calculator类,实现ActionListener接口
public class Calculater implements ActionListener
{
//定义变量和按钮数组
private String[] names = {"Backspace","CE","C","+","7","8","9","-",
"4","5","6","*","1","2","3","/","0","+/-",".","="};
private JButton[] buttonArray = new JButton[names.length];
private boolean append = false;//默认追加为false
private String operator = "+";//默认运算符为“+”
private String s1 = "0";//默认字符为0
private String ss = "0";//默认字符为0
//创建可以显示20个字符的文本框
JTextField jtf = new JTextField(20);
//构造方法
public Calculater() {}
public Calculater(String title)
{
//创建窗口、面板,并设置面板布局为网格布局
JFrame jf = new JFrame(title);
JPanel jp = new JPanel();
jp.setLayout(new GridLayout(5,4));
//依次添加按钮到面板中,并为按钮注册监听器
for (int i = 0; i < buttonArray.length; i++)
{
buttonArray[i] = new JButton(names[i]);
buttonArray[i].addActionListener(this);
jp.add(buttonArray[i]);
}
//添加文本框到窗体中
jf.add(jtf,BorderLayout.NORTH);
jf.add(jp);//添加面板到窗体中
jtf.setHorizontalAlignment(JTextField.RIGHT);//设置文本框的水平方向为右
jtf.setText("0");//设置初始文本为0
jtf.setEditable(false);//设置文本框为不可编辑状态
//设置窗体属性
jf.pack();//系统自动设置大小和位置
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//实现监听接口的actionPerformed方法
public void actionPerformed(ActionEvent e)
{
String comm = e.getActionCommand();
if(comm.matches("\\d")) //用正则表达式判断输出的是否是0~9
{
if(append)//如果是,追加显示
{
String temp = jtf.getText();
jtf.setText(temp + comm);
}else //如果不是,显示该字符并将追加设置为true
{
jtf.setText(comm);
append = true;
}
}
else if(comm.equals("."))//输入小数点时
{
String temp = jtf.getText();
if(temp.indexOf(".")== -1 && append){//当输入的文本中没有小数点时
jtf.setText(temp+comm);
append = true; //输入小数点后继续追加
}else if(!append){ //当字符串开始时候先输入 " . " 则直接输出" 0. "
jtf.setText("0"+comm);
append = true;
}
}else if("+-*/".indexOf(comm)!= -1)//输入加减乘除符号时,
{//以下运算应该注意数据类型,尤其是大数字和浮点数及int数在运算中的区别
operator = comm;
s1 = jtf.getText();
double d3 = Double.parseDouble(s1);
double d4 = Double.parseDouble(ss);
BigDecimal bd3 = new BigDecimal(d3+"");
BigDecimal bd4 = new BigDecimal(d4+"");
if(operator.equals("+"))//加法时
{
d3 = bd3.add(bd4).doubleValue();
ss = d3+"";
jtf.setText(ss);
}else if(operator.equals("-"))//减法时
{
if(d4 == 0.0){
ss = s1;
jtf.setText(ss);
}else{
d3 = bd4.subtract(bd3).doubleValue();
ss = d3+"";
jtf.setText(ss);
}
}else if(operator.equals("*"))//乘法时
{
if(d4 == 0.0){
ss = s1;
jtf.setText(ss);
}else
{
d3 = bd3.multiply(bd4).doubleValue();
ss = d3+"";
jtf.setText(ss);
}
}else if(operator.equals("/"))//除法时
{
if(d4 == 0.0)
{
ss = s1;
jtf.setText(s1);
}else
{
d3 = bd4.divide(bd3,15,BigDecimal.ROUND_HALF_UP).doubleValue();
}
ss = d3+"";
jtf.setText(ss);
}
append = false; //不继续追加
}else if(comm.equals("="))//输入等号时,计算加减乘除的结果
{
String s2 = jtf.getText();
double d1 = Double.parseDouble(ss);
double d2 = Double.parseDouble(s2);
BigDecimal bd1 = new BigDecimal(d1+"");
BigDecimal bd2 = new BigDecimal(d2+"");
if(operator.equals("+"))
{
d1 = bd1.add(bd2).doubleValue();
}else if(operator.equals("-"))
{
d1 = bd1.subtract(bd2).doubleValue();
}else if(operator.equals("*"))
{
d1 = bd1.multiply(bd2).doubleValue();
}else if(operator.equals("/"))//精确计算浮点除法
{
if(d2!=0.0)
{
d1 = bd1.divide(bd2,15,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
ss = "0";
jtf.setText(d1+"");
append = false; //不继续追加
}else if(comm.equals("CE")||comm.equals("C"))//输入CE或C时
{
jtf.setText("0");
ss = "0";
append = false;
}else if(comm.equals("+/-"))//改变数值的正负号
{
String temp = jtf.getText();
if(!append)
{
jtf.setText("-");
append = true;
}else if(temp.startsWith("-"))//如果字符串以负号开头
{
jtf.setText(temp.substring(1));
}else
{
jtf.setText("-" + temp);
}
}else if(comm.equals("Backspace"))//输入Backspace时,退回一个字符
{
String temp = jtf.getText();
if(temp.length()>0)
jtf.setText(temp.substring(0,temp.length()-1));
}
}
//主方法
public static void main(String[] args)
{
//创建名为Calculator的计算器对象
new Calculater("Calculater");
}
}
import java.awt.*;
import java.awt.event.*;
import java.math.BigDecimal;
import javax.swing.*;//创建计算器Calculator类,实现ActionListener接口
public class Calculater implements ActionListener
{
//定义变量和按钮数组
private String[] names = {"Backspace","CE","C","+","7","8","9","-",
"4","5","6","*","1","2","3","/","0","+/-",".","="};
private JButton[] buttonArray = new JButton[names.length];
private boolean append = false;//默认追加为false
private String operator = "+";//默认运算符为“+”
private String s1 = "0";//默认字符为0
private String ss = "0";//默认字符为0
//创建可以显示20个字符的文本框
JTextField jtf = new JTextField(20);
//构造方法
public Calculater() {}
public Calculater(String title)
{
//创建窗口、面板,并设置面板布局为网格布局
JFrame jf = new JFrame(title);
JPanel jp = new JPanel();
jp.setLayout(new GridLayout(5,4));
//依次添加按钮到面板中,并为按钮注册监听器
for (int i = 0; i < buttonArray.length; i++)
{
buttonArray[i] = new JButton(names[i]);
buttonArray[i].addActionListener(this);
jp.add(buttonArray[i]);
}
//添加文本框到窗体中
jf.add(jtf,BorderLayout.NORTH);
jf.add(jp);//添加面板到窗体中
jtf.setHorizontalAlignment(JTextField.RIGHT);//设置文本框的水平方向为右
jtf.setText("0");//设置初始文本为0
jtf.setEditable(false);//设置文本框为不可编辑状态
//设置窗体属性
jf.pack();//系统自动设置大小和位置
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//实现监听接口的actionPerformed方法
public void actionPerformed(ActionEvent e)
{
String comm = e.getActionCommand();
if(comm.matches("\\d")) //用正则表达式判断输出的是否是0~9
{
if(append)//如果是,追加显示
{
String temp = jtf.getText();
jtf.setText(temp + comm);
}else //如果不是,显示该字符并将追加设置为true
{
jtf.setText(comm);
append = true;
}
}
else if(comm.equals("."))//输入小数点时
{
String temp = jtf.getText();
if(temp.indexOf(".")== -1 && append){//当输入的文本中没有小数点时
jtf.setText(temp+comm);
append = true; //输入小数点后继续追加
}else if(!append){ //当字符串开始时候先输入 " . " 则直接输出" 0. "
jtf.setText("0"+comm);
append = true;
}
}else if("+-*/".indexOf(comm)!= -1)//输入加减乘除符号时,
{//以下运算应该注意数据类型,尤其是大数字和浮点数及int数在运算中的区别
operator = comm;
s1 = jtf.getText();
double d3 = Double.parseDouble(s1);
double d4 = Double.parseDouble(ss);
BigDecimal bd3 = new BigDecimal(d3+"");
BigDecimal bd4 = new BigDecimal(d4+"");
if(operator.equals("+"))//加法时
{
d3 = bd3.add(bd4).doubleValue();
ss = d3+"";
jtf.setText(ss);
}else if(operator.equals("-"))//减法时
{
if(d4 == 0.0){
ss = s1;
jtf.setText(ss);
}else{
d3 = bd4.subtract(bd3).doubleValue();
ss = d3+"";
jtf.setText(ss);
}
}else if(operator.equals("*"))//乘法时
{
if(d4 == 0.0){
ss = s1;
jtf.setText(ss);
}else
{
d3 = bd3.multiply(bd4).doubleValue();
ss = d3+"";
jtf.setText(ss);
}
}else if(operator.equals("/"))//除法时
{
if(d4 == 0.0)
{
ss = s1;
jtf.setText(s1);
}else
{
d3 = bd4.divide(bd3,15,BigDecimal.ROUND_HALF_UP).doubleValue();
}
ss = d3+"";
jtf.setText(ss);
}
append = false; //不继续追加
}else if(comm.equals("="))//输入等号时,计算加减乘除的结果
{
String s2 = jtf.getText();
double d1 = Double.parseDouble(ss);
double d2 = Double.parseDouble(s2);
BigDecimal bd1 = new BigDecimal(d1+"");
BigDecimal bd2 = new BigDecimal(d2+"");
if(operator.equals("+"))
{
d1 = bd1.add(bd2).doubleValue();
}else if(operator.equals("-"))
{
d1 = bd1.subtract(bd2).doubleValue();
}else if(operator.equals("*"))
{
d1 = bd1.multiply(bd2).doubleValue();
}else if(operator.equals("/"))//精确计算浮点除法
{
if(d2!=0.0)
{
d1 = bd1.divide(bd2,15,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
ss = "0";
jtf.setText(d1+"");
append = false; //不继续追加
}else if(comm.equals("CE")||comm.equals("C"))//输入CE或C时
{
jtf.setText("0");
ss = "0";
append = false;
}else if(comm.equals("+/-"))//改变数值的正负号
{
String temp = jtf.getText();
if(!append)
{
jtf.setText("-");
append = true;
}else if(temp.startsWith("-"))//如果字符串以负号开头
{
jtf.setText(temp.substring(1));
}else
{
jtf.setText("-" + temp);
}
}else if(comm.equals("Backspace"))//输入Backspace时,退回一个字符
{
String temp = jtf.getText();
if(temp.length()>0)
jtf.setText(temp.substring(0,temp.length()-1));
}
}
//主方法
public static void main(String[] args)
{
//创建名为Calculator的计算器对象
new Calculater("Calculater");
}
}
import java.awt.event.*;
import javax.swing.*;
public class OperationButton extends JButton{
String operateSign;
public OperationButton(String s){
super(s);
operateSign=s;
setForeground(Color.red);
}
public String getOperateSign(){
return operateSign;
}
}