Интерфейс этого калькулятора имитирует простой калькулятор, поставляемый с Windows, включая интерактивный интерфейс и ответы на различные входные данные. Функции строки меню и кнопок памяти пока не реализованы.
Скопируйте код кода следующим образом:
импортировать java.awt.Color;
импортировать java.awt.Container;
импортировать java.awt.GridLayout;
импортировать java.awt.Insets;
импортировать java.awt.event.ActionEvent;
импортировать java.awt.event.ActionListener;
импортировать javax.swing.JFrame;
импортировать javax.swing.JButton;
импортировать javax.swing.JMenu;
импортировать javax.swing.JMenuBar;
импортировать javax.swing.JMenuItem;
импортировать javax.swing.JPanel;
импортировать javax.swing.JTextField;
импортировать javax.swing.SwingConstants;
импортировать javax.swing.plaf.basic.BasicBorders;
Калькулятор публичного класса расширяет JFrame {
частный статический окончательный длинный серийныйVersionUID = 1L;
Контейнер c = getContentPane();
StringBuilder number1 = new StringBuilder("");//Сохраняем первую числовую строку
StringBuilder number2 = new StringBuilder("");//Сохраняем вторую числовую строку
Оператор StringBuilder = новый StringBuilder("");//Оператор хранения
StringBuilder result = new StringBuilder("");//Результат операции хранения
JTextField Numbershow = new JTextField("0.");//Область отображения чисел, начальное отображение - "0".
public static void main(String[] args) {//основной метод
Калькулятор c1 = новый калькулятор();
c1.setVisible(истина);
}
public Calculator() {// Метод построения калькулятора
setTitle("Калькулятор");
setBounds(100, 100, 260, 245);
setResizable (ложь);
setLayout (нуль);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenuBar();//Создаем строку меню
createNumberShow();//Создаем область отображения чисел
createMemoShow();//Создаем отображение памяти
createClearButtons();//Создаем три кнопки, такие как Backspace, CE и C
createButtonArea();//Создаем область цифровой кнопки
}
Private void createMenuBar() {//Метод создания строки меню
JMenuBar меню = новый JMenuBar ();
setJMenuBar (панель меню);
JMenumenu1 = новое JMenu("Редактировать");
JMenu меню2 = новое JMenu("Вид");
JMenu меню3 = новый JMenu("Помощь");
менюбар.добавить(меню1);
менюбар.добавить(меню2);
менюбар.добавить(меню3);
JMenuItemmenu1item1 = новый JMenuItem("Копировать");
JMenuItemmenu1item2 = новый JMenuItem("Вставить");
JMenuItemmenu2item1 = новый JMenuItem("стандартный тип");
JMenuItemmenu2item2 = новый JMenuItem("Научный");
JMenuItemmenu2item3 = новый JMenuItem("Научная группа");
JMenuItemmenu3item1 = новый JMenuItem("Тема справки");
JMenuItemmenu3item2 = новый JMenuItem("О калькуляторе");
меню1.добавить(меню1пункт1);
меню1.добавить(меню1пункт2);
меню2.добавить(меню2пункт1);
меню2.добавить(меню2пункт2);
меню2.добавить(меню2пункт3);
меню3.добавить(меню3пункт1);
меню3.добавить(меню3пункт2);
}
Private void createNumberShow() {//Метод для создания области отображения чисел
Numbershow.setHorizontalAlignment(JTextField.RIGHT);
Numbershow.setBounds(5, 0, 245, 22);
Numbershow.setEnabled(ложь);
Numbershow.setDisabledTextColor(Color.BLACK);
c.add(показать номер);
}
Private void createMemoShow() {//Метод для создания отображения памяти
JTextField memoshow = новый JTextField();
memoshow.setEditable(ложь);
memoshow.setBounds(10, 30, 28, 22);
memoshow.setBorder(new BasicBorders.FieldBorder(Color.black,
Цвет.черный, Цвет.белый, Цвет.белый));
c.add(памятка);
}
Private void createClearButtons() {// Метод для создания трех кнопок, таких как Backspace, CE и C.
JButton[]clearbutton = новый JButton[3];
String[]clearbuttontext = { "Backspace", "CE", "C" };
для (int я = 0; я <3; я++) {
Clearbutton[i] = новый JButton();
Clearbutton[i].setText(clearbuttontext[i]);
Clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
Clearbutton[i].setMargin(новые вставки(0, 0, 0, 0));
Clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
Clearbutton[i].setForeground(Color.blue);
Clearbutton[i].setBounds(48 + i * 68, 30, 63, 22);
Clearbutton[i].setForeground(Color.red);
c.add(clearbutton[i]);
}
Clearbutton[0].addActionListener(new ActionListener() {//Добавляем прослушиватель для кнопки Backspace
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (number1.toString().equals("")) {// Если ввод не внесен
showNumber(numbershow, Number1);//показать номер1
} else if (operator.toString().equals("")) {// Если введено только число 1
Number1.deleteCharAt(number1.toString().length() - 1 // Удаляем последний символ числа1);
showNumber(numbershow, Number1);//показать номер1
} else if (number2.toString().equals("")) {// Если введены только число1 и оператор
showNumber(numbershow, Number1);//Без обработки, отображаем номер1
} else {// Если введены номер1, оператор, номер2
Number2.deleteCharAt(number2.toString().length() - 1 // Удаляем последний символ числа2);
showNumber(numbershow, Number2);//показать номер2
}
}
});
Clearbutton[1].addActionListener(new ActionListener() {//Добавляем прослушиватель для кнопки CE
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (number1.toString().equals("")) {// Если ввод не внесен
showNumber(numbershow, Number1);//показать номер1
} else if (operator.toString().equals("")) {// Если введено только число 1
Number1.setLength(0);//Очистить номер1
showNumber(numbershow, Number1);//показать номер1
} else if (number2.toString().equals("")) {// Если введен номер1 и оператор
showNumber(numbershow, Number2);//Без обработки, отображаем номер2
} else {// Если введены номер1, оператор, номер2
Number2.setLength(0);//Очистить номер2
showNumber(numbershow, Number2);//показать номер2
}
}
});
clearbutton[2].addActionListener(new ActionListener() {//Добавляем прослушиватель для кнопки C
@Override
public void actionPerformed(ActionEvent e) {// Очистить все хранилище
номер1.setLength(0);
число2.setLength(0);
оператор.setLength(0);
Numbershow.setText("0.");
результат.setLength(0);
}
});
}
Private void createButtonArea() {//Метод создания области цифровых кнопок
JPanel ButtonArea = новый JPanel();
ButtonArea.setBounds(5, 55, 245, 125);
ButtonArea.setLayout(новый GridLayout(4, 6, 5, 5));
c.add(ButtonArea);
JButton[] числовая кнопка = новая JButton[24];
String[] numberbuttontext = { "MC", "7", "8", "9", "/", "sqrt", "MR",
"4", "5", "6", "*", "%", "MS", "1", "2", "3", "-", "1/X", "M+",
"0", "+/-", ".", "+", "=" };
for (int i = 0; i < 24; i++) {// Используйте цикл, чтобы добавить метки к этим 24 кнопкам
NumberButton[i] = новая JButton(numberbuttontext[i]);
ButtonArea.add(номеркнопка[i]);
if (i % 6 == 0 || i % 6 == 4 || i == 23) {// Кнопка оператора установлена на красный цвет
NumberButton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(новые вставки(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
числовая кнопка[i].setForeground(Color.red);
} else {//Другие настройки выделены синим цветом
NumberButton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(новые вставки(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
числовая кнопка[i].setForeground(Color.blue);
}
}
int[] Numbers = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };//Числа в этом массиве соответственно представляют собой порядковые номера чисел 0–9 в массиве numberbuttontext
for (int i = 0; i <= 9; i++) { // Используйте цикл для добавления прослушивателей для десяти цифровых кнопок 0-9
окончательная строка str = String.valueOf(i);
numberbutton[numbers[i]].addActionListener(new ActionListener() {//Добавить прослушиватели для кнопок 0–9
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (operator.toString().equals("")) {// Перед вводом оператора
add(number1, str); // Устанавливаем только значение Number1
showNumber(numbershow, Number1);//Отображаем только значение числа1
} else {// После ввода оператора
add(number2, str);//Устанавливаем только значение Number2
showNumber(numbershow, Number2);//Отображаем только значение числа2
}
}
});
}
numberbutton[20].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки «+/-»
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (operator.toString().equals("")) {// Перед вводом оператора
add(number1, "+/-");// Устанавливаем только значение числа1
showNumber(numbershow, Number1);//Отображаем только значение числа1
} else {// После ввода оператора
add(number2, "+/-");// Устанавливаем только значение числа2
showNumber(numbershow, Number2);//Отображаем только значение числа2
}
}
});
numberbutton[21].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки "."
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (operator.toString().equals("")) {// Перед вводом оператора отображается только значение числа1
добавить(номер1, ".");
showNumber (номершоу, номер1);
} else {// После ввода оператора отображается только значение числа 2.
добавить(номер2, ".");
showNumber (номершоу, номер2);
}
}
});
numberbutton[22].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки «+»
@Override
общественный недействительный actionPerformed (ActionEvent e) {
оператор.setLength(0);
operator.append("+");
}
});
numberbutton[16].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки "-"
@Override
общественный недействительный actionPerformed (ActionEvent e) {
оператор.setLength(0);
operator.append("-");
}
});
numberbutton[10].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки "*"
@Override
общественный недействительный actionPerformed (ActionEvent e) {
оператор.setLength(0);
operator.append("*");
}
});
numberbutton[4].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки "/"
@Override
общественный недействительный actionPerformed (ActionEvent e) {
оператор.setLength(0);
оператор.добавление("/");
}
});
numberbutton[23].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки "="
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (number1.toString().equals("")) {// Когда число1 пусто
showNumber (номершоу, номер1);
} else if (operator.toString().equals("")) {// Когда число1 не пусто и оператор пуст
showNumber (номершоу, номер1);
} else if (number2.toString().equals("")) {// Когда число1 и оператор не пусты, но число2 пусто
переключатель (operator.toString()) {
регистр ("+"): {
номер2.добавление(номер1.toString());
двойной d = Double.parseDouble(number1
.toString())
+ Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
случай ("-"): {
номер2.добавление(номер1.toString());
двойной d = Double.parseDouble(number1
.toString())
- Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
случай ("*"): {
номер2.добавление(номер1.toString());
двойной d = Double.parseDouble(number1
.toString())
* Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
случай ("/"): {
номер2.добавление(номер1.toString());
двойной d = Double.parseDouble(number1
.toString())
/ Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
}
} else {// Когда номер1, оператор, номер2 не пусты
переключатель (operator.toString()) {
регистр ("+"): {
двойной d = Double.parseDouble(number1
.toString())
+ Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
случай ("-"): {
двойной d = Double.parseDouble(номер1
.toString())
- Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
случай ("*"): {
двойной d = Double.parseDouble(number1
.toString())
* Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
случай ("/"): {
двойной d = Double.parseDouble(number1
.toString())
/ Double.parseDouble(number2.toString());
результат.setLength(0);
результат.добавление(д);
showNumber (номершоу, результат);
номер1.setLength(0);
номер1.append(d);
}
перерыв;
}
}
}
});
numberbutton[17].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки «1/x»
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (number1.toString().equals("")) {//Когда число1 не введено
Numbershow.setText("Дивизор не может быть равен нулю");
} else if (operator.toString().equals("")) {//number1 было введено, но оператор не был введен
if (Double.parseDouble(number1.toString()) == 0) {// Если значение числа1 равно нулю
Numbershow.setText("Дивизор не может быть равен нулю");
} else {// Если значение числа1 не равно нулю
двойной d = 1 / (Double.parseDouble(number1
.toString()));
номер1.setLength(0);
Number1.append(d);//Открываем и сохраняем значение Number1
showNumber (номершоу, номер1);
}
} else if (number2.toString().equals("")) {//number1 и оператор введены, но номер2 не введен
двойной d = 1 / (Double.parseDouble(number1
.toString()));
number2.append(d);//Открываем и сохраняем значение числа1
showNumber (номершоу, номер2);
} else {//Введите номер1, оператор, номер2
двойной d = 1 / (Double.parseDouble(number2
.toString()));
число2.setLength(0);
Number2.append(d);//Открываем и сохраняем значение Number2
showNumber (номершоу, номер2);
}
}
});
numberbutton[11].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки "%"
@Override
общественный недействительный actionPerformed (ActionEvent e) {
// Временно вакантно
}
});
numberbutton[5].addActionListener(new ActionListener() { //Добавляем прослушиватель для кнопки "sqrt"
@Override
общественный недействительный actionPerformed (ActionEvent e) {
if (number1.toString().equals("")) {//Когда число1 не введено
showNumber (номершоу, номер1);
} else if (operator.toString().equals("")) {//number1 было введено, но оператор не был введен
if (Double.parseDouble(number1.toString()) < 0) {// число1 меньше 0
Numbershow.setText("Ввод функции недействителен");
} else {// число1 больше 0
двойной d = Math.sqrt(Double.parseDouble(number1
.toString()));
номер1.setLength(0);
Number1.append(d);//Открываем и сохраняем значение Number1
showNumber (номершоу, номер1);
}
} else if (number2.toString().equals("")) {//number1 и оператор введены, но номер2 не введен
двойной d = Math.sqrt(Double.parseDouble(number1
.toString()));
number2.append(d);//Открываем и сохраняем значение числа1
showNumber (номершоу, номер2);
} else {//Введите номер1, оператор, номер2
двойной d = Math.sqrt(Double.parseDouble(number2
.toString()));
число2.setLength(0);
Number2.append(d);//Открываем и сохраняем значение Number2
showNumber (номершоу, номер2);
}
}
});
}
public void add(StringBuilder s1, String s2) {// Определить метод изменения цифровой строки после нажатия кнопки
if (s2.equals("+/-")) {// Определяем изменение цифровой строки после ввода "+/-"
if (s1.toString().equals("") || s1.toString().equals("0")) {// Если числовая строка пуста или равна 0, никаких изменений не произойдет
s1.append("");
} else {// Если числовая строка не пуста и не равна 0, добавьте или удалите символ "-" перед числовой строкой.
if (s1.toString().startsWith("-")) {
s1.deleteCharAt(0);
} еще {
s1.insert(0, "-");
}
}
}
if (s2.equals(".")) {// Определить изменение цифровой строки после ввода "."
if (s1.toString().indexOf(".") == -1) {// Определите, содержит ли числовая строка символ ".", если нет, выполните следующий код.
if (s1.toString().equals("")) {// Если числовая строка пуста, установите для нее значение "0".
s1.setLength(0);
s1.append("0.");
} еще {
s1.append(".");
}
} else {// Если есть, никаких изменений не произойдет
s1.append("");
}
}
if (s2.equals("0")) {// Определить изменение цифровой строки после ввода "0"
if (s1.toString().equals("0")) {// Когда числовая строка равна "0", никаких изменений не происходит
s1.append("");
} else {// Если числовая строка равна "0", добавьте "0" после строки
s1.append("0");
}
}
for (int i = 1; i < 10; i++) {//Посредством цикла определите изменения в цифровой строке после ввода 1-9
Строка ул = String.valueOf(i);
if (s2.equals(str)) {// Определить изменение цифровой строки после ввода 1-9
if (s1.toString().equals("0")) {
s1.setLength(0);
s1.append(строка);
} еще
s1.append(строка);
}
}
}
public void showNumber(JTextField j, StringBuilder s) {//Метод, определяющий способ отображения числовых строк в области отображения чисел
if (s.toString().equals("") == true || s.toString().equals("0") == true) {
j.setText("0.");
} else if (s.toString().indexOf(".") == -1) {
j.setText(s.toString() + ".");
} еще {
j.setText(s.toString());
}
}
}