【问题标题】:Java Swing calculatorJava Swing 计算器
【发布时间】:2015-01-07 10:55:13
【问题描述】:

我是一名 Java 菜鸟,正在研究 GUI 计算器,我刚到这里就结束了.. 我有按钮,我需要绑定这些数字并存储在运算符( + - * / )之间的某个位置以显示在我的 JTextArea 上。如何从按钮中获取值并应用公式?

感谢您的宝贵时间... :)

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.JTextArea;

public class Compute implements ActionListener{

    public String firstNumber;
    public String secondNumber;
    public String resultNumber;
    public double result = 0.0;

    JFrame frame;
    JPanel panel;
    JButton btn_0,btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9,btn_C,btn_Add,btn_Sub,btn_Mul,btn_Div,btn_E;
    JTextArea area;

    public Compute() {
        area = new JTextArea();
        frame = new JFrame();
        panel = new JPanel();
        btn_0 = new JButton("0");
        btn_0.addActionListener(this);
        btn_1 = new JButton("1");
        btn_1.addActionListener(this);
        btn_2 = new JButton("2");
        btn_2.addActionListener(this);
        btn_3 = new JButton("3");
        btn_3.addActionListener(this);
        btn_4 = new JButton("4");
        btn_4.addActionListener(this);
        btn_5 = new JButton("5");
        btn_5.addActionListener(this);
        btn_6 = new JButton("6");
        btn_6.addActionListener(this);
        btn_7 = new JButton("7");
        btn_7.addActionListener(this);
        btn_8 = new JButton("8");
        btn_8.addActionListener(this);
        btn_9 = new JButton("9");
        btn_9.addActionListener(this);
        btn_C = new JButton("C");
        btn_C.addActionListener(this);
        btn_Add = new JButton("+");
        btn_Add.addActionListener(this);
        btn_Sub = new JButton("-");
        btn_Sub.addActionListener(this);
        btn_Mul = new JButton("x");
        btn_Mul.addActionListener(this);
        btn_Div = new JButton("/");
        btn_Div.addActionListener(this);
        btn_E = new JButton("=");
        btn_E.addActionListener(this);
        frame.setLayout(null);
        frame.setSize(300,400);
        frame.setTitle("GUI_Calculator");
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(btn_C).setBounds(90, 50, 40, 40);
        frame.add(btn_E).setBounds(130, 50, 40, 40);
        frame.add(btn_0).setBounds(50, 50, 40, 40);
        frame.add(btn_1).setBounds(50, 90, 40, 40);
        frame.add(btn_2).setBounds(90, 90, 40, 40);
        frame.add(btn_3).setBounds(130, 90, 40, 40);
        frame.add(btn_4).setBounds(50, 130, 40, 40);
        frame.add(btn_5).setBounds(90, 130, 40, 40);
        frame.add(btn_6).setBounds(130,130, 40, 40);
        frame.add(btn_7).setBounds(50, 170, 40, 40);
        frame.add(btn_8).setBounds(90, 170, 40, 40);
        frame.add(btn_9).setBounds(130, 170, 40, 40);
        frame.add(btn_Add).setBounds(170, 170, 40, 40);
        frame.add(btn_Sub).setBounds(170, 130, 40, 40);
        frame.add(btn_Mul).setBounds(170, 90, 40, 40);
        frame.add(btn_Div).setBounds(170, 50, 40, 40);

        frame.add(area).setBounds(50, 20, 160, 25);


        frame.setVisible(true);
    }

    public static void main(String[] args) {

        new Compute();
    }


    @Override
    public void actionPerformed(ActionEvent e) {


        if(e.getSource() == btn_0)
        {
            area.append("0");
        }
        if(e.getSource() == btn_C)
        {
            area.setText(null);
        }
        if(e.getSource() == btn_1)
        {
            area.append("1");
        }
        if(e.getSource() == btn_2)
        {
            area.append("2");
        }
        if(e.getSource() == btn_3)
        {
            area.append("3");
        }
        if(e.getSource() == btn_4)
        {
            area.append("4");
        }
        if(e.getSource() == btn_5)
        {
            area.append("5");
        }
        if(e.getSource() == btn_6)
        {
            area.append("6");
        }
        if(e.getSource() == btn_7)
        {
            area.append("7");
        }
        if(e.getSource() == btn_8)
        {
            area.append("8");
        }
        if(e.getSource() == btn_9)
        {
            area.append("9");
        }
        if(e.getSource() == btn_E)
        {
        }


    }






}

【问题讨论】:

  • 看在上帝的份上,请使用数组而不是声明大量不同的按钮变量。
  • 我不清楚问题是什么。您已经在尝试让您的听众将按钮与所有不同的变量一一进行比较,这确实很笨拙。但它有效吗?问题是它不起作用,您需要帮助找出原因吗?或者是它的问题,但你想要一个更好的方式来编写它?
  • 是的,我同意混乱的按钮代码..这是一个学习曲线,我完全是菜鸟..问题是我得到了按钮,但是当它被按下时,我想让它得到值当我去并将值存储到某个地方以便我可以应用公式时
  • 避免使用null 布局,像素完美的布局是现代用户界面设计中的一种错觉。影响组件单个尺寸的因素太多,您无法控制。 Swing 旨在与核心布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正
  • 另见calculator example。它使用ScriptEngine 来评估文本区域中的表达式。

标签: java swing user-interface calculator


【解决方案1】:

由于您是 Java 初学者,从长远来看,这里有一些技巧可以让您的生活更轻松

  • 通过私有函数初始化按钮:

    Private void initializeButtons(){
        //Initialize your buttons...
    }
    

    从您的构造函数中调用该函数。

  • 设置监听器也一样

  • 在您的 actionPerformed 函数中,将除第一个 if-case 之外的所有其他 if-case if-cases,即使它可能会发现第一个案例是合理的。

回到您的问题.. 只需致电:

String text = theButton.getText();

然后,获取该文本并通过将其解析为“int”来对其进行计算。

int tempNum = Integer.parseInt(text);

进行必要的计算并将结果保存在您想要的任何位置。

祝你好运!

【讨论】:

  • 非常感谢您的评论。谢谢!
  • 如果您喜欢,请随时评价=)
猜你喜欢
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
相关资源
最近更新 更多