2016-03-28 1 views
0

Я пытаюсь выяснить, как реализовать несколько кнопок в текущем коде, но после многих попыток я не могу понять это. Мне нужно сделать следующее:Java gui swing calculator операторы

Так что мой вопрос: когда я добавляю 2 числа вместе, и если они не равны 0 (например, x = 10 и y = 10), когда я нажимаю кнопку «плюс», содержимое в поле y исчезает, как я могу это исправить?

Также моя ясная кнопка не очищает все содержимое в поле x, y и result, как я могу это исправить?

Как правильно выравнивать поля x и y?

package democalc; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.EtchedBorder; 


class Calculator implements ActionListener { 

    private JFrame frame; 
    private JTextField xfield, yfield; 
    private JLabel rslt; 
    private JButton multiButton, clearButton, addButton, subButton, divideButton; 
    private JPanel xpanel, buttonPanel; 

    public Calculator() { 

     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new BorderLayout()); 

     xpanel = new JPanel(); 
     xpanel.setBorder(new EtchedBorder()); 
     xpanel.setLayout(new GridLayout(3, 2)); 

     xpanel.add(new JLabel("x =")); 
     xfield = new JTextField("0", 5); 
     xpanel.add(xfield); 

     xpanel.add(new JLabel("y =")); 
     yfield = new JTextField("0", 5); 
     xpanel.add(yfield); 

     xpanel.add(new JLabel()); 
     rslt = new JLabel("0"); 
     rslt.setBackground(Color.green); 
     rslt.setBorder(new EtchedBorder()); 
     rslt.setOpaque(true); 
     xpanel.add(rslt); 
     frame.add(xpanel, BorderLayout.NORTH); 

     buttonPanel = new JPanel(); 
     frame.add(buttonPanel, BorderLayout.CENTER); 

     buttonPanel.add(addButton = new JButton("+")); 
     addButton.addActionListener(this); 

     buttonPanel.add(subButton = new JButton("-")); 
     subButton.addActionListener(this); 

     buttonPanel.add(multiButton = new JButton("*")); 
     multiButton.addActionListener(this); 

     buttonPanel.add(divideButton = new JButton("/")); 
     divideButton.addActionListener(this); 

     buttonPanel.add(clearButton = new JButton("Clear")); 
     clearButton.addActionListener(this); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public void actionPerformed(ActionEvent event) { 

     int x = 0, y = 0; 

     try { 
      String xStr = xfield.getText(); 
      x = Integer.parseInt(xStr); 
     } 
     catch (NumberFormatException e) { 
       // The string xStr is not a legal number. 
      rslt.setText("Illegal data for x."); 
      xfield.requestFocusInWindow(); 
      return; 
     } 

     /* Get a number from yfield in the same way. */ 

     try { 
      String yStr = yfield.getText(); 
      y = Integer.parseInt(yStr); 
     } 
     catch (NumberFormatException e) { 
      rslt.setText("Illegal data for y."); 
      yfield.requestFocusInWindow(); 
      return; 
     } 

     /* Perform the operation based on the action command 
      from the button. Note that division by zero produces 
      an error message. */ 

     String op = event.getActionCommand(); 
     if (op.equals("+")) 
      rslt.setText("x + y = " + (x+y)); 
     else if (op.equals("-")) 
      rslt.setText("x - y = " + (x-y)); 
     else if (op.equals("*")) 
      rslt.setText("x * y = " + (x*y)); 
     else if (op.equals("/")) { 
      if (y == 0) 
       rslt.setText("ERROR"); 
      else 
       rslt.setText("x/y = " + (x/y)); 


     } 

     if (event.getSource() == clearButton) 
      xfield.setText("0"); 
      yfield.setText("0"); 


    } 
} 
+3

Что вы хотите сказать? –

+0

Я обновил свои вопросы и код – user3325133

+1

* «Я обновил свои вопросы» * На этом примечании SO - это сайт Q & A, а не справочная служба. В идеале каждая тема вопроса должна иметь *** один ясный, конкретный вопрос. Другие вопросы нужно разделить на отдельные темы вопросов. –

ответ

1

ваш если фигурные скобки отсутствуют. Вот почему

yfield.setText("0"); 

Выполняется каждый раз. Заполните Ваш код с помощью правильного кода

if (event.getSource() == clearButton){ 
    xfield.setText("0"); 
    yfield.setText("0"); 
}