请高手做一个java编程题,做一个计算器(要求可以计算),用swing做,要求有JFrame、JButton。要原创哦!
答案:2 悬赏:0
解决时间 2021-01-14 05:28
- 提问者网友:浮克旳回音
- 2021-01-13 12:01
请高手做一个java编程题,做一个计算器(要求可以计算),用swing做,要求有JFrame、JButton。要原创哦!
最佳答案
- 二级知识专家网友:痴妹与他
- 2021-01-13 12:52
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
@SuppressWarnings("serial")
public class JiSu extends JFrame {
private int li=0;
private String s1="",s2="",s3=""; // s2 + s3得到最后结果
private JPanel cp1;
private JTextField t1; // 文本框
private JButton br[][]=new JButton[4][4]; //二维数组 建立按钮
private char text[][]={{'1','2','3','/'},{'4','5','6','*'},{'7','8','9','-'},{'0','=','.','+'}}; //二维数组 为按钮赋值 和做+-×÷运算判断的字符值
private boolean ip=false;
//main 执行
public static void main(String[] args) {
JiSu frame = new JiSu();
frame.setTitle("计算器");
frame.setVisible(true);
}
public JiSu() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 305, 243);
cp1 = new JPanel();
cp1.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(cp1);
cp1.setLayout(null);
//文本框
t1 = new JTextField("");
t1.setHorizontalAlignment(SwingConstants.RIGHT);
t1.setBounds(38, 20, 168, 21);
cp1.add(t1);
t1.setColumns(10);
//清空
JButton bt = new JButton("C");
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
t1.setText("");
s1=s2=s3="";
}
});
bt.setBounds(213, 19, 46, 23);
cp1.add(bt);
//4X4 事件按钮
int x,y=65;//坐标
for (int i = 0; i < br.length; i++) {
x=35;
for (int j = 0; j < br[i].length; j++) {
br[i][j] = new JButton(text[i][j]+"");
br[i][j].setBounds(x, y, 45, 23);
br[i][j].addActionListener(new M());
cp1.add(br[i][j]);
x=x+60;
}
y=y+33;
}
}// 文本框 添加 数字 并判断
private void set(int i,int j){
if (t1.getText().equals("")&&getText(i, j)=='.') {
s1="0";
}
s1=s1+getText(i, j);
t1.setText(s1);
}
//[][]的麻烦,直接传递参数获取值
private char getText(int i,int j){
return text[i][j];
}
//事件监听器
class M implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//循环按钮二维数组得到事件监听
for (int i = 0; i < br.length; i++) {
for (int j = 0; j < br[i].length; j++) {
s1=t1.getText();
if (e.getSource().equals(br[i][j])) {
if(ip){t1.setText(""); s1=""; ip=false;}
//switch语句 判断
switch (getText(i, j)) {
case '+':
count();
li=1;
s3=t1.getText(); t1.setText("");
break;
case '-':
li=2;
s3=t1.getText(); t1.setText("");
break;
case '*':
li=3;
s3=t1.getText(); t1.setText("");
break;
case '/':
li=4;
s3=t1.getText(); t1.setText("");
break;
case '=':
s2=t1.getText();
count();
break;
case '.':
if(!t1.getText().contains(".")){
set(i,j);
}
break;
default:
set(i,j);
break;
}//swich 结束
}//if 事件选择 结束
}
}
}
//最终计算方法
private void count() {
double i=0,j=0;
if (s3.equals("")) {
i=0;
}
else if(s2.equals("")){
j=0;
}else {
i=Double.parseDouble(s3);//字符串转换成double类型
j=Double.parseDouble(s2);
}
if(li==1)
i=i+j; t1.setText(i+"");
if(li==2)
i=i-j; t1.setText(i+"");
if(li==3)
i=i*j; t1.setText(i+"");
if(li==4)
i=i/j; t1.setText(i+"");
ip=true;//当ip=true 传入事件中,当点击任意按钮,开始新的计算
}//计算结尾
} //监听类块 结尾
}//程序结尾
追问:怎么不能求和呢??其他的都可以算,就是不能算加法。
追答:- -估计你是拷贝我没修改过的,这代码我总共更新了3次 并重发。。第一次是有那现象,因为我吧case '+': +写成*,第二次 改好了。第三次重发稍微整理了下代码功能
如果 出现那问题 你就看一下switchcase '?':那一栏的?值……
……或者等待一点点时间,答案更新了在复制
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
@SuppressWarnings("serial")
public class JiSu extends JFrame {
private int li=0;
private String s1="",s2="",s3=""; // s2 + s3得到最后结果
private JPanel cp1;
private JTextField t1; // 文本框
private JButton br[][]=new JButton[4][4]; //二维数组 建立按钮
private char text[][]={{'1','2','3','/'},{'4','5','6','*'},{'7','8','9','-'},{'0','=','.','+'}}; //二维数组 为按钮赋值 和做+-×÷运算判断的字符值
private boolean ip=false;
//main 执行
public static void main(String[] args) {
JiSu frame = new JiSu();
frame.setTitle("计算器");
frame.setVisible(true);
}
public JiSu() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 305, 243);
cp1 = new JPanel();
cp1.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(cp1);
cp1.setLayout(null);
//文本框
t1 = new JTextField("");
t1.setHorizontalAlignment(SwingConstants.RIGHT);
t1.setBounds(38, 20, 168, 21);
cp1.add(t1);
t1.setColumns(10);
//清空
JButton bt = new JButton("C");
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
t1.setText("");
s1=s2=s3="";
}
});
bt.setBounds(213, 19, 46, 23);
cp1.add(bt);
//4X4 事件按钮
int x,y=65;//坐标
for (int i = 0; i < br.length; i++) {
x=35;
for (int j = 0; j < br[i].length; j++) {
br[i][j] = new JButton(text[i][j]+"");
br[i][j].setBounds(x, y, 45, 23);
br[i][j].addActionListener(new M());
cp1.add(br[i][j]);
x=x+60;
}
y=y+33;
}
}// 文本框 添加 数字 并判断
private void set(int i,int j){
if (t1.getText().equals("")&&getText(i, j)=='.') {
s1="0";
}
s1=s1+getText(i, j);
t1.setText(s1);
}
//[][]的麻烦,直接传递参数获取值
private char getText(int i,int j){
return text[i][j];
}
//事件监听器
class M implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//循环按钮二维数组得到事件监听
for (int i = 0; i < br.length; i++) {
for (int j = 0; j < br[i].length; j++) {
s1=t1.getText();
if (e.getSource().equals(br[i][j])) {
if(ip){t1.setText(""); s1=""; ip=false;}
//switch语句 判断
switch (getText(i, j)) {
case '+':
count();
li=1;
s3=t1.getText(); t1.setText("");
break;
case '-':
li=2;
s3=t1.getText(); t1.setText("");
break;
case '*':
li=3;
s3=t1.getText(); t1.setText("");
break;
case '/':
li=4;
s3=t1.getText(); t1.setText("");
break;
case '=':
s2=t1.getText();
count();
break;
case '.':
if(!t1.getText().contains(".")){
set(i,j);
}
break;
default:
set(i,j);
break;
}//swich 结束
}//if 事件选择 结束
}
}
}
//最终计算方法
private void count() {
double i=0,j=0;
if (s3.equals("")) {
i=0;
}
else if(s2.equals("")){
j=0;
}else {
i=Double.parseDouble(s3);//字符串转换成double类型
j=Double.parseDouble(s2);
}
if(li==1)
i=i+j; t1.setText(i+"");
if(li==2)
i=i-j; t1.setText(i+"");
if(li==3)
i=i*j; t1.setText(i+"");
if(li==4)
i=i/j; t1.setText(i+"");
ip=true;//当ip=true 传入事件中,当点击任意按钮,开始新的计算
}//计算结尾
} //监听类块 结尾
}//程序结尾
追问:怎么不能求和呢??其他的都可以算,就是不能算加法。
追答:- -估计你是拷贝我没修改过的,这代码我总共更新了3次 并重发。。第一次是有那现象,因为我吧case '+': +写成*,第二次 改好了。第三次重发稍微整理了下代码功能
如果 出现那问题 你就看一下switchcase '?':那一栏的?值……
……或者等待一点点时间,答案更新了在复制
全部回答
- 1楼网友:孤独的牧羊人
- 2021-01-13 14:20
追问:谢谢你,但不知道怎么的,我的编译器编译不了你的这个程序。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息