2014-12-13 4 views
0

Привет, у меня есть этот калькулятор, и я хочу, чтобы он был пустым, как сделать ввод пользователя в текстовое поле, но я не знаю, как заставить его работать так. Я хочу упростить его так, но я не знаю, как заставить его работать без кнопок с цифрами.Калькулятор GUI без цифровых кнопок

enter image description here

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

class MP2_2 extends JFrame implements ActionListener { 

Container c; 
JTextField result; 
JPanel p = new JPanel(); 
JButton b[] = new JButton[16]; 
String s[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-", "/", "*", "=", "C"}; 
//----------------------Me------------------------ 
String Screen = "", monitor1 = "", monitor2 = "", OperationOnScreen = ""; 
boolean CommandEmpty = true, switcher = true; 
double R = Integer.MIN_VALUE, L = Integer.MIN_VALUE; 

//------------------------------------------------ 

public MP2_2() { 
    super("MP2_2"); 
    c = getContentPane(); 
    result = new JTextField(); 
    result.setEditable(true); 

    p.setLayout(new GridLayout(4, 4)); 
    for (int i = 0; i < 16; i++) { 
     b[i] = new JButton(s[i]); 
     b[i].addActionListener(this); 
     p.add(b[i]); 
    } 
    c.add(result, BorderLayout.NORTH); 
    c.add(p); 

}//End Constructor 

public static void main(String[] args) { 
    MP2_2 calcu = new MP2_2(); 
    calcu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    calcu.setSize(300, 300); 
    calcu.setVisible(true); 
} 

//------------------------------------------------    

public void actionPerformed(ActionEvent event) { 
    for (int i = 0; i <= 9; i++)//Numbers 
    { 
     if (event.getSource() == b[i]) { 
      Screen += i; 
      result.setText(""); 
      result.setText(Screen); 
     } 
    } 

    for (int i = 10; i <= 14; i++)//Commands 
    { 
     if (event.getSource() == b[i]) { 
      if (result.getText().lastIndexOf(OperationOnScreen) != -1)//prevent exception 
      { 
       result.setText(result.getText().substring(0, result.getText().lastIndexOf(OperationOnScreen)) + s[i]); 
      } else { 
       result.setText(result.getText() + s[i]); 
      } 
      OperationOnScreen = s[i]; 

      if (switcher) { 
       monitor1 = s[i]; 
       switcher = false; 
      } else { 
       monitor2 = s[i]; 
       switcher = true; 
      } 

      if (monitor1 != monitor2 && monitor2 != "") { 
       if (switcher) //execute older,send sign newer 
       { 
        Calc(event, monitor1.charAt(0), monitor2); 
       } else { 
        Calc(event, monitor2.charAt(0), monitor1); 
       } 
      } 
      if (s[i] != "=") //calc returns 0 
      { 
       Calc(event, s[i].charAt(0), s[i]); 
      } 
     } 
    } 

    if (event.getSource() == b[15]) //Clear 
    { 
     Screen = ""; 
     monitor1 = ""; 
     monitor2 = ""; 
     switcher = true; 
     CommandEmpty = true; 
     result.setText(""); 
    } 
}//end actionPerformed 

public void Calc(ActionEvent event, char OpType, String Operator) { 
    if (Operator == "=") { 
     Operator = ""; 
    } 

    if (CommandEmpty && Screen == "") { 
     return; 
    } else if (CommandEmpty && Screen != "") { 
     R = Integer.parseInt(Screen); 
     result.setText(Screen + Operator); 
     Screen = ""; 
     CommandEmpty = false; 
    } else if (!CommandEmpty && Screen != "") { 
     L = Integer.parseInt(Screen); 
     R = Operations(R, L, OpType);//calculate 
     Screen = ""; 
     result.setText(""); 
     result.setText(R + Operator); 
    } 
}//End Calc    

public static double Operations(double R, double L, char op) { 
    switch (op) { 
     case '+': 
      return R + L; 
     case '-': 
      return R - L; 
     case '*': 
      return R * L; 
     case '/': 
      return R/L; 
    } 
    return 0; 
} 
}//end class 

EDIT: Я думаю, что мой вопрос не ясно, извините. Я хотел, чтобы моя программа также поддерживала ввод с клавиатуры. Как мне это сделать? Поэтому я могу, наконец, удалить цифровые кнопки, как на картинке.

+0

* ".., но я не знаю, как заставить его работать без кнопок с цифрами." * Но я не знаю, каков ваш вопрос. У вас есть вопрос? BTW. Если бы я шел по этому минималистическому GUI-пути, я бы потерял остальные кнопки и передал лот сценарию 'ScriptEngine', чтобы оценить, когда пользователь« завершает »формулу с помощью ключа ввода. –

ответ

0

При удалении кнопок вам необходимо восстановить действие кнопок с помощью вызова result.getText().

Вот код, который работает на ваших цифровых кнопках. Он устанавливает значение экрана.

for (int i = 0; i <= 9; i++)//Numbers 
{ 
    if (event.getSource() == b[i]) { 
     Screen += i; 
     result.setText(""); 
     result.setText(Screen); 
    } 
} 

Поэтому, когда вы нажимаете на свои кнопки управления, вам необходимо установить Screen. Вот ваш цикл для команд. Я добавил Screen = result.getText(); в блоке else. Это сработало для меня.

for (int i = 10; i <= 14; i++)//Commands 
{ 
    if (event.getSource() == b[i]) { 
     if (result.getText().lastIndexOf(OperationOnScreen) != -1)//prevent exception 
     { 
      result.setText(result.getText().substring(0, result.getText().lastIndexOf(OperationOnScreen)) + s[i]); 
     } else { 
      Screen = result.getText(); 
      result.setText(result.getText() + s[i]); 
     } 
+0

Какие строки мне нужно перестроить, чтобы иметь возможность использовать это? – user827391012

+0

Этот вопрос непонятен. Если вы спрашиваете о компиляции кода Java, вам нужно будет перекомпилировать весь файл. – ProgrammersBlock

Смежные вопросы