/*
* @(#)JCalculator.java 1.00 06/17/2015
*/
import java.awt.*
import java.awt.event.*
import javax.swing.*
/**
* A simple calculator program.
* <p>I saw this program in a QQ group, and help a friend correct it.</p>
*
* @author Singyuen Yip
* @version 1.00 12/29/2009
* @see JFrame
* @see ActionListener
*/
public class JCalculator extends JFrame implements ActionListener {
/**
* Serial Version UID
*/
private static final long serialVersionUID = -169068472193786457L
/**
* This class help close the Window.
* @author Singyuen Yip
*
*/
private class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent we) {
System.exit(0)
}
}
int i
// Strings for Digit &Operator buttons.
private final String[] str = { "7", "8", "9", "/", "4", "5", "6", "*","1",
"2", "3", "-", ".", "0", "=", "+" }
// Build buttons.
JButton[] buttons = new JButton[str.length]
// For cancel or reset.
JButton reset = new JButton("CE")
// Build the text field to show the result.
JTextField display = new JTextField("0")
/**
* Constructor without parameters.
*/
public JCalculator() {
super("Calculator")
// Add a panel.
JPanel panel1 = new JPanel(new GridLayout(4, 4))
// panel1.setLayout(new GridLayout(4,4))
for (i = 0 i < str.length i++) {
buttons[i] = new JButton(str[i])
panel1.add(buttons[i])
}
JPanel panel2 = new JPanel(new BorderLayout())
// panel2.setLayout(new BorderLayout())
panel2.add("Center", display)
panel2.add("East", reset)
// JPanel panel3 = new Panel()
getContentPane().setLayout(new BorderLayout())
getContentPane().add("North", panel2)
getContentPane().add("Center", panel1)
// Add action listener for each digit &operator button.
for (i = 0 i < str.length i++)
buttons[i].addActionListener(this)
// Add listener for "reset" button.
reset.addActionListener(this)
// Add listener for "display" button.
display.addActionListener(this)
// The "close" button "X".
addWindowListener(new WindowCloser())
// Initialize the window size.
setSize(800, 800)
// Show the window.
// show()Using show() while JDK version is below 1.5.
setVisible(true)
// Fit the certain size.
pack()
}
public void actionPerformed(ActionEvent e) {
Object target = e.getSource()
String label = e.getActionCommand()
if (target == reset)
handleReset()
else if ("0123456789.".indexOf(label) >0)
handleNumber(label)
else
handleOperator(label)
}
// Is the first digit pressed?
boolean isFirstDigit = true
/**
* Number handling.
* @param key the key of the button.
*/
public void handleNumber(String key) {
if (isFirstDigit)
display.setText(key)
else if ((key.equals(".")) &&(display.getText().indexOf(".") <0))
display.setText(display.getText() + ".")
else if (!key.equals("."))
display.setText(display.getText() + key)
isFirstDigit = false
}
/**
* Reset the calculator.
*/
public void handleReset() {
display.setText("0")
isFirstDigit = true
operator = "="
}
double number = 0.0
String operator = "="
/**
* Handling the operation.
* @param key pressed operator's key.
*/
public void handleOperator(String key) {
if (operator.equals("+"))
number += Double.valueOf(display.getText())
else if (operator.equals("-"))
number -= Double.valueOf(display.getText())
else if (operator.equals("*"))
number *= Double.valueOf(display.getText())
else if (operator.equals("/"))
number /= Double.valueOf(display.getText())
else if (operator.equals("="))
number = Double.valueOf(display.getText())
display.setText(String.valueOf(number))
operator = key
isFirstDigit = true
}
public static void main(String[] args) {
new JCalculator()
}
}
运行界面:
具体代码如下:
import javax.swing.*
import java.awt.event.*
import java.awt.*
public class Calculator extends JFrame implements ActionListener {
private JFrame jf
private JButton[] allButtons
private JButton clearButton
private JTextField jtf
public Calculator() {
//对图形组件实例化
jf=new JFrame("任静的计算器1.0:JAVA版")
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(){
System.exit(0)
}
})
allButtons=new JButton[16]
clearButton=new JButton("清除")
jtf=new JTextField(25)
jtf.setEditable(false)
String str="123+456-789*0.=/"
for(int i=0i<allButtons.lengthi++){
allButtons[i]=new JButton(str.substring(i,i+1))
}
}
public void init(){
//完成布局
jf.setLayout(new BorderLayout())
JPanel northPanel=new JPanel()
JPanel centerPanel=new JPanel()
JPanel southPanel=new JPanel()
northPanel.setLayout(new FlowLayout())
centerPanel.setLayout(new GridLayout(4,4))
southPanel.setLayout(new FlowLayout())
northPanel.add(jtf)
for(int i=0i<16i++){
centerPanel.add(allButtons[i])
}
southPanel.add(clearButton)
jf.add(northPanel,BorderLayout.NORTH)
jf.add(centerPanel,BorderLayout.CENTER)
jf.add(southPanel,BorderLayout.SOUTH)
addEventHandler()
}
//添加事件监听
public void addEventHandler(){
jtf.addActionListener(this)
for(int i=0i<allButtons.lengthi++){
allButtons[i].addActionListener(this)
}
clearButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Calculator.this.jtf.setText("")
}
})
}
//事件处理
public void actionPerformed(ActionEvent e) {
//在这里完成事件处理 使计算器可以运行
String action=e.getActionCommand()
if(action=="+"||action=="-"||action=="*"||action=="/"){
}
}
public void setFontAndColor(){
Font f=new Font("宋体",Font.BOLD,24)
jtf.setFont(f)
jtf.setBackground(new Color(0x8f,0xa0,0xfb))
for(int i=0i<16i++){
allButtons[i].setFont(f)
allButtons[i].setForeground(Color.RED)
}
}
public void showMe(){
init()
setFontAndColor()
jf.pack()
jf.setVisible(true)
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
public static void main(String[] args){
new Calculator().showMe()
}
}
package swingimport java.awt.*
import java.awt.event.*
import javax.swing.*
@SuppressWarnings("serial")
public class Calculator extends JFrame{
JTextField jt1 ,jt2 ,jt3
JLabel jLabel
JButton equButton,addButton,reduceButton,mulButton,divButton
public Calculator() {
super("简易计算器")
JPanel contentPanel = new JPanel()
contentPanel.setLayout(new GridLayout(2, 0))
JPanel uJPanel = new JPanel()
Dimension preferredSize = new Dimension(50, 29)
GridBagConstraints gbc = new GridBagConstraints()
uJPanel.setLayout(new GridBagLayout())
gbc.gridx = GridBagConstraints.RELATIVE
gbc.gridy = 0
gbc.fill = GridBagConstraints.HORIZONTAL
gbc.insets = new Insets(1, 2, 1, 2)
jt1 = new JTextField(4)
jLabel = new JLabel()
jLabel.setPreferredSize(new Dimension(10, 29))
jt2 = new JTextField(4)
equButton = new JButton("=")
ActionListener myActionListener = new MyActionListener()
equButton.addActionListener(myActionListener)
jt3 = new JTextField(8)
jt1.setPreferredSize(preferredSize)
jt2.setPreferredSize(preferredSize)
jt3.setPreferredSize(preferredSize)
uJPanel.add(jt1,gbc)
uJPanel.add(jLabel,gbc)
uJPanel.add(jt2,gbc)
uJPanel.add(equButton,gbc)
gbc.weightx = 1
uJPanel.add(jt3,gbc)
contentPanel.add(uJPanel)
JPanel dJPanel = new JPanel()
dJPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 8, 2))
addButton = new JButton("+")
reduceButton = new JButton("-")
mulButton = new JButton("*")
divButton = new JButton("/")
addButton.addActionListener(myActionListener)
reduceButton.addActionListener(myActionListener)
mulButton.addActionListener(myActionListener)
divButton.addActionListener(myActionListener)
dJPanel.add(addButton)
dJPanel.add(reduceButton)
dJPanel.add(mulButton)
dJPanel.add(divButton)
contentPanel.add(dJPanel)
this.setContentPane(contentPanel)
this.pack()
this.setLocationRelativeTo(null)
this.setDefaultCloseOperation(3)
this.setVisible(true)
}
class MyActionListener implements ActionListener{
Double d1,d2,d3
String operator = ""
public void actionPerformed(ActionEvent e) {
String fun = e.getActionCommand()
if (!fun.equals("=")) {
jLabel.setText(fun)
operator = fun
}else {
d1 = jt1.getText().equals("")?null:Double.valueOf(jt1.getText())
d2 = jt2.getText().equals("")?null:Double.valueOf(jt2.getText())
d3 = calculate(d1,d2,operator)
jt3.setText(d3==null ? "":d3.toString())
jt3.setCaretPosition(0)
}
}
}
Double calculate(Double d1,Double d2,String operator){
if (d1 == null || d2 == null) {
return null
}
Double d3 = null
switch (operator) {
case "+":
d3 = d1 + d2
break
case "-":
d3 = d1 - d2
break
case "*":
d3 = d1 * d2
break
case "/":
d3 = d1 / d2
break
}
return d3
}
public static void main(String[] args) {
new Calculator()
}
}