Калькулятор, создание поля ввода с выравниванием по правому краю - Java
Формулировка задачи:
Изучаю java и в задании после написания картинки калькулятора задача:
заменить класс JTextField на JFormattedTextField.
сама цель задания:
циклом,который создает кнопки и добавляет их в массив.
Заранее благодарю за ответы!
создание поля ввода с выравниванием по правому краю, как в настоящих калькуляторах.
вот мой код::
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;
public class Calculatop {
//объявление всех компонентов калькулятора
JPanel windowContent;
JTextField displayField;
JButton button0;
JButton button1;
JButton button2;
JButton button3;
JButton button4;
JButton button5;
JButton button6;
JButton button7;
JButton button8;
JButton button9;
JButton buttonPoint;
JButton buttonEqual;
JButton buttonPlus;
JButton buttonMinus;
JButton buttonMultiply;
JButton buttonDivide;
JPanel p1;
JPanel p2;
//в конструкторе создаются все компоненты
//и добавляются на фрейм с помощью комбинации
// BorderLayout u GridLayout
Calculatop(){
windowContent= new JPanel();
//задаем схему для этой панели
BorderLayout bl= new BorderLayout();
windowContent.setLayout(bl);
//создаем и отображаем поле
//добавляем его в северную область окна
displayField = new JTextField(30);
windowContent.add("North", displayField);
//создаем кнопки используя конструктор
//класса JButton, который принимает текст
// кнопк в качестве параметра
button0= new JButton("0");
button1= new JButton("1");
button2= new JButton("2");
button3= new JButton("3");
button4= new JButton("4");
button5= new JButton("5");
button6= new JButton("6");
button7= new JButton("7");
button8= new JButton("8");
button9= new JButton("9");
buttonPoint= new JButton(".");
buttonEqual= new JButton("=");
buttonPlus= new JButton("+");
buttonMinus= new JButton("-");
buttonMultiply= new JButton("*");
buttonDivide= new JButton("/");
//создаем панель с GridLayot
//которая содержит 12 кнопок - 10 кнопок с числами
// и кнопки с точкой и знаком равно
p1=new JPanel();
GridLayout gl= new GridLayout(4,3);
p1.setLayout(gl);
//добавляем кнопки на панель p1
p1.add(button1);
p1.add(button2);
p1.add(button3);
p1.add(button4);
p1.add(button5);
p1.add(button6);
p1.add(button7);
p1.add(button8);
p1.add(button9);
p1.add(button0);
p1.add(buttonPoint);
p1.add(buttonEqual);
//помещаем панель p1 в центральную область окна
windowContent.add("Center",p1);
p2= new JPanel();
p2.setLayout(gl);
p2.add(buttonMinus);
p2.add(buttonPlus);
p2.add(buttonDivide);
p2.add(buttonMultiply);
windowContent.add("East",p2);
//создаем фрейм и задаем его основную панель
JFrame frame= new JFrame("Calculator");
frame.setContentPane(windowContent);
//делаем размер окна достаточным
//для того,чтобы вместились все компоненты
frame.pack();
//отображаем окно
frame.setVisible(true);
}
public static void main(String[] args){
Calculatop calc= new Calculatop();
}
}
я так понял что просто нужно заменить места, где написано JTextField на JFormattedTextField?
и пожалуйста если не трудно, ссылку где можно прочитать про эти классы поподробнее
P.S. хотелось бы узнать как заменить эти 10 строчек, которые начинаются
button0= new JButton("0");Решение задачи: «Калькулятор, создание поля ввода с выравниванием по правому краю»
textual
Листинг программы
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class CalculatorEngine implements ActionListener {
Calculator parent;
char selectedAction = ' ';
double curentResult = 0;
public CalculatorEngine(Calculator parent) {
this.parent = parent;
}
public void actionPerformed(ActionEvent event) {
JButton clickedButton = (JButton) event.getSource();
String displayFieldText = parent.displayField.getText();
double displayValue = 0;
if (!"".equals(displayFieldText)) {
displayValue = Double.parseDouble(displayFieldText);
}
Object source = event.getSource();
if (source == parent.jButtonDivide) {
selectedAction = '/';
curentResult = displayValue;
parent.displayField.setText("");
}else if (source == parent.jButtonMultiply) {
selectedAction = '*';
curentResult = displayValue;
parent.displayField.setText("");
}else if (source == parent.jButtonMinus) {
selectedAction = '-';
curentResult = displayValue;
parent.displayField.setText("");
}else if (source == parent.jButtonPlus) {
selectedAction = '+';
curentResult = displayValue;
parent.displayField.setText("");
}else if (source == parent.jButtonEqual) {
if (selectedAction == '/') {
curentResult /= displayValue;
if (displayValue == 0) {
parent.displayField.setText("Cannot divide by zero");
} else {
parent.displayField.setText("" + curentResult);
}
}else if (selectedAction == '*') {
curentResult *= displayValue;
parent.displayField.setText("" + curentResult);
}else if (selectedAction == '-') {
curentResult -= displayValue;
parent.displayField.setText("" + curentResult);
}else if (selectedAction == '+') {
curentResult += displayValue;
parent.displayField.setText("" + curentResult);
}
}else if (source == parent.jButtonErase) {
curentResult = 0;
parent.displayField.setText("");
}else {
String clickedButtonLabel = clickedButton.getText();
if (clickedButtonLabel == ".") {
if (displayFieldText.indexOf(".") == 1) {
parent.displayField.setText(displayFieldText + "");
}else {
parent.displayField.setText(displayFieldText + clickedButtonLabel);
}
}else {
parent.displayField.setText(displayFieldText + clickedButtonLabel);
}
}
}
}