2015-01-06 4 views
0

Я - Java Noob и работаю в GUI Calculator, и я просто оказался здесь. У меня есть кнопки, и мне нужно связать эти числа и хранить где-то между операторами (+ - * /), чтобы показать на моем JTextArea .. Как получить значения с кнопок и применить формулу?Java Swing calculator

благодарит вас за ваше время ... :)

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) 
     { 
     } 


    } 






} 
+2

Пожалуйста, ради бога, используйте массив вместо объявления тонны различных переменных кнопок. – ajb

+1

Я не понимаю, в чем проблема. Вы уже пытаетесь, чтобы ваш слушатель сравнивал кнопку со всеми разными переменными, один за другим, что действительно неуклюже. Но работает ли это? Проблема в том, что она не работает, и вам нужна помощь в выяснении причин? Или проблема в том, что она работает, но вы хотите, чтобы лучше ее написать? – ajb

+0

yup согласен с грязными кнопочными кодами .. это кривая обучения, я полностью noob..и проблема в том, что я получаю кнопки, но когда она нажата, я хотел, чтобы она получала значения, когда я иду и сохраняю значения где-нибудь, чтобы я мог применять формулы –

ответ

1

Поскольку вы новичок Java, вот несколько советов, которые сделают вашу жизнь проще в долгосрочной перспективе

  • Initialize ваши кнопки через частную функцию:

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

    Вызов этой функции из вашего конструктора.

  • Сделайте то же самое для установки listeneres

  • В вашей actionPerformed функции, делают все остальные, если-случаи для первого, за исключением быть else if .. это будет безопасно гораздо больше времени вычисления, так как вы не заставить вашу программу работать через все if-case, даже если это может показаться, что первый случай правдоподобен.

Вернуться на ваш вопрос .. просто звоните:

String text = theButton.getText(); 

Затем, возьмите этот текст и сделать вычисления на него путем анализа его как «ИНТ».

< =>

int tempNum = Integer.parseInt(text); 

сделать необходимые расчеты и сохранить результат везде, где вы хотите.

Удачи вам!

+0

Очень ценю за комментарий .. Спасибо! –

+0

Не стесняйтесь оценивать, если вам нравится =) –

+0

* «Не стесняйтесь оценивать, если вам нравится» * У OP не хватает репутации. до голосования! Хотя они могут [принять ответ] (http://meta.stackexchange.com/a/5235/155831), если это поможет решить проблему. –