用java编写计算器 能够实现简单的加、减、乘、除、乘方、开方运算等;
发布网友
发布时间:2022-04-07 19:31
我来回答
共3个回答
懂视网
时间:2022-04-07 23:52
GridBagLayout相对于GridLayout来说更灵活,功能也更强大,用它实现的计算器的布局效果图如下:
import java.awt.*;
import javax.swing.*;
/**
* Calculator类,实现计算器界面
* @author Ares
*/
public class Calculator{
final String[] KEYS = { "CE", "C", "←", "÷", "7", "8", "9", "×", "4","5", "6", "-", "1", "2", "3", "+", "0", ".", "=" };
JButton[] keys = new JButton[KEYS.length];
JTextField resultText = new JTextField("0");
public void addComponentsToPane(Container pane) {
GridBagLayout layout = new GridBagLayout();
pane.setLayout(layout);
resultText.setFont(new Font("Century Schoolbook", Font.PLAIN, 14));
resultText.setEditable(false);
resultText.setHorizontalAlignment(SwingConstants.RIGHT);
pane.add(resultText,new GBC(0, 0, 4, 1).setIpad(400, 50).setWeight(0.5, 0.5).setFill(GridBagConstraints.BOTH));
for (int i = 0; i < keys.length; i++) {
keys[i] = new JButton(KEYS[i]);
if(i == keys.length-3){
pane.add(keys[i],new GBC(i % 4, i / 4 + 1,2,1).setIpad(0, 12).setInsets(1).setFill(GridBagConstraints.BOTH).setWeight(0.5, 0.5));
}else if (i == keys.length-2 || i == keys.length-1) {
pane.add(keys[i],new GBC(i % 4+1, i / 4 + 1).setIpad(0, 12).setInsets(1).setFill(GridBagConstraints.BOTH).setWeight(0.5, 0.5));
}else {
pane.add(keys[i], new GBC(i % 4, i / 4 + 1).setIpad(0, 12).setInsets(1).setFill(GridBagConstraints.BOTH).setWeight(0.5, 0.5));
}
}
}
public void createAndShowGUI() {
JFrame frame = new JFrame("Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addComponentsToPane(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new Calculator().createAndShowGUI();
}
});
}
}
用来设置GridBagConstraints的类如下:
import java.awt.GridBagConstraints;
import java.awt.Insets;
public class GBC extends GridBagConstraints {
/**
* 构造函数,用来设置组件所占单元格的坐标
*
* @param gridx 横向坐标
* @param gridy 纵向坐标
*/
public GBC(int gridx, int gridy) {
this.gridx = gridx;
this.gridy = gridy;
}
/**
* 构造函数,用来设置组件所占单元格的坐标,同时指定宽度和高度
* @param gridx 横向坐标
* @param gridy 纵向坐标
* @param gridwidth 组件宽度
* @param gridheight 组件高度
*/
public GBC(int gridx, int gridy, int gridwidth, int gridheight) {
this.gridx = gridx;
this.gridy = gridy;
this.gridwidth = gridwidth;
this.gridheight = gridheight;
}
/**
* 当组件没有空间大时,设置组件的位置
* @param anchor 组建位置
* @return 当前对象
*/
public GBC setAnchor(int anchor) {
this.anchor = anchor;
return this;
}
/**
* 设置填充
* @param fill 设置填充方式
* @return 当前对象
*/
public GBC setFill(int fill) {
this.fill = fill;
return this;
}
/**
* 设置组件随窗口延伸的幅度
* @param weightx 横向延伸大小
* @param weighty 纵向延伸大小
* @return 当前对象
*/
public GBC setWeight(double weightx, double weighty) {
this.weightx = weightx;
this.weighty = weighty;
return this;
}
/**
* 设置组件之间的间距
* @param distance 上下左右间距一样
* @return 当前对象
*/
public GBC setInsets(int distance) {
this.insets = new Insets(distance, distance, distance, distance);
return this;
}
/**
* 设置组件之间的间距
* @param top 上间距
* @param left 左间距
* @param bottom 底间距
* @param right 右间距
* @return 当前对象
*/
public GBC setInsets(int top, int left, int bottom, int right) {
this.insets = new Insets(top, left, bottom, right);
return this;
}
/**
* 设置组件内部填充空间,即给组件的最小高度或宽度添加多大的空间
* @param ipadx 横向填充
* @param ipady 纵向填充
* @return 当前对象
*/
public GBC setIpad(int ipadx, int ipady) {
this.ipadx = ipadx;
this.ipady = ipady;
return this;
}
}
使用GridBagLayout实现的计算器UI
标签:
热心网友
时间:2022-04-07 21:00
//注意,没有考虑*/和+-的优先级。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator3 extends JFrame implements ActionListener {
private boolean dotExist, operated, equaled; // 帮助运算的布尔变量
private double storedNumber; // 目前的结果
private char lastOperator; // 表示上一运算符
private JTextField operation; // 结果栏
private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符
private JButton[] numbers; // 数字
// 构造者
public Calculator3() {
setTitle("Calculator");
// 初始化变量
dotExist = false; // 表示当前的数是否有小数点
operated = false; // 表示任意运算符是否被按下
equaled = false; // 表示等号是否被按下
storedNumber = 0;
lastOperator = '?';
// 初始化窗口变量
operation = new JTextField("0");
operation.setEditable(false);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
dot = new JButton(".");
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("*");
div = new JButton("/");
sqrt = new JButton("√");
equal = new JButton("=");
changePN = new JButton("±");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
addComponent(layout, operation, 0, 0, 4, 1);
addComponent(layout, numbers[1], 1, 0, 1, 1);
addComponent(layout, numbers[2], 1, 1, 1, 1);
addComponent(layout, numbers[3], 1, 2, 1, 1);
addComponent(layout, numbers[4], 2, 0, 1, 1);
addComponent(layout, numbers[5], 2, 1, 1, 1);
addComponent(layout, numbers[6], 2, 2, 1, 1);
addComponent(layout, numbers[7], 3, 0, 1, 1);
addComponent(layout, numbers[8], 3, 1, 1, 1);
addComponent(layout, numbers[9], 3, 2, 1, 1);
addComponent(layout, dot, 4, 0, 1, 1);
addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1);
addComponent(layout, plus, 1, 3, 1, 1);
addComponent(layout, minus, 2, 3, 1, 1);
addComponent(layout, multi, 3, 3, 1, 1);
addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, equal, 5, 0, 2, 1);
addComponent(layout, changePN, 5, 2, 1, 1);
addComponent(layout, clear, 5, 3, 1, 1);
}
// 对按钮进行反应的方法
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if (btn == clear) {
operation.setText("0");
dotExist = false;
storedNumber = 0;
lastOperator = '?';
} else if (btn == equal) {
operate('=');
equaled = true;
} else if (btn == plus) {
operate('+');
equaled = false;
} else if (btn == minus) {
operate('-');
equaled = false;
} else if (btn == multi) {
operate('*');
equaled = false;
} else if (btn == div) {
operate('/');
equaled = false;
} else if (btn == changePN) {
operate('p');
operate('=');
equaled = true;
} else if (btn == sqrt) {
operate('s');
operate('=');
equaled = true;
} else {
if (equaled)
storedNumber = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i]) {
if (operation.getText().equals("0"))
operation.setText("" + i);
else if (!operated)
operation.setText(operation.getText() + i);
else {
operation.setText("" + i);
operated = false;
}
}
if (btn == dot && !dotExist) {
operation.setText(operation.getText() + ".");
dotExist = true;
}
}
}
// 进行运算的方法
private void operate(char operator) {
double currentNumber = Double.valueOf(operation.getText())
.doubleValue();
if (lastOperator == '?')
storedNumber = currentNumber;
else if (lastOperator == '+')
storedNumber += currentNumber;
else if (lastOperator == '-')
storedNumber -= currentNumber;
else if (lastOperator == '*')
storedNumber *= currentNumber;
else if (lastOperator == '/')
storedNumber /= currentNumber;
else if (lastOperator == 'p')
storedNumber *= -1;
else if (lastOperator == 's')
storedNumber = Math.sqrt(currentNumber);
else if (lastOperator == '=' && equaled)
storedNumber = currentNumber;
operation.setText("" + storedNumber);
operated = true;
lastOperator = operator;
}
// 快捷使用GridBagLayout的方法
private void addComponent(GridBagLayout layout, Component component,
int row, int col, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(10, 2, 10, 2);
constraints.weightx = 100;
constraints.weighty = 100;
constraints.gridx = col;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height;
layout.setConstraints(component, constraints);
if (component instanceof JButton)
((JButton) component).addActionListener(this);
getContentPane().add(component);
}
// 主方法初始化并显示窗口
public static void main(String[] args) {
Calculator3 calc = new Calculator3();
calc.setSize(290, 400);
calc.setVisible(true);
}
}
热心网友
时间:2022-04-07 22:18
这个不错呢:
http://zhidao.baidu.com/question/99078202.html