#java
Здравствуйте, форумчане Изучаю Java, занимаюсь разработкой курсовой работы "Инженерный калькулятор" подскажите пожалуйста каким образом организовывать программный код, чтобы он был максимально оптимизирован. Вопрос касается компонентов JButton (50 кнопок на калькуляторе), учитывая их количество как лучше их объявлять и инициализировать JButton b1 = new JButton ("1"); и так еще 49 раз Делать это все в цикле с использованием массива надписей на кнопках, а к кнопкам обращаться по индексу, который соответствует элементу с надписсю в массиве и как ураще было бы описывать слушателей для кнопок? Для каждой кнопки отдельный слушатель Или один слушатель и оператор switch на 50 элементов подскажите какие из этих методов более эффективные в моем случае, и какие из них будут занимать меньше системного времени. зарание спасибо
Ответы
Ответ 1
Я бы делал так: Один объект - одна логическая единица программы. Т.е. одна кнопка - один объект, один слушатель (или столько слушателей, сколько для нее надо). Это, по-моему, один из основополагающих принципов ООП. От циклов ваш код может стать более непонятным и запутанным.Ответ 2
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator { public static void main(String[] args) { CalculatorFrame frame = new CalculatorFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class CalculatorFrame extends JFrame { public CalculatorFrame() { setTitle("Calculator"); CmdPanel panel = new CmdPanel(); add(panel); pack(); } } class CmdPanel extends JPanel { private JButton display; private JPanel panel; private double result; private String lastCommand; private boolean start; public CmdPanel() { setLayout(new BorderLayout()); result = 0; lastCommand = "="; start = true; display = new JButton("0"); display.setEnabled(false); add(display, BorderLayout.NORTH); ActionListener insert = new InsertAction(); ActionListener command = new CommandAction(); panel = new JPanel(); panel.setLayout(new GridLayout(4, 4)); addButton("7", insert); addButton("8", insert); addButton("9", insert); addButton("/", command); addButton("4", insert); addButton("5", insert); addButton("6", insert); addButton("*", command); addButton("1", insert); addButton("2", insert); addButton("3", insert); addButton("-", command); addButton("0", insert); addButton(".", insert); addButton("=", command); addButton("+", command); add(panel, BorderLayout.CENTER); } public void calculate(double x) { if (lastCommand.equals("+")) result += x; else if (lastCommand.equals("-")) result -= x; else if (lastCommand.equals("*")) result *= x; else if (lastCommand.equals("/")) result /= x; else if (lastCommand.equals("=")) result = x; display.setText("" + result); } private void addButton(String label, ActionListener listener) { JButton button = new JButton(label); button.addActionListener(listener); panel.add(button); } private class InsertAction implements ActionListener { @Override public void actionPerformed(ActionEvent event) { String input = event.getActionCommand(); if (start) { display.setText(""); start = false; } display.setText(display.getText() + input); } } private class CommandAction implements ActionListener { @Override public void actionPerformed(ActionEvent event) { String command = event.getActionCommand(); if (start) { if (command.equals("-")) { display.setText(command); start = false; } else { lastCommand = command; } } else { calculate(Double.parseDouble(display.getText())); lastCommand = command; start = true; } } } }Ответ 3
было бы просто если распознавался цикл: for (int id = 1; id <= 50; в вашем случае...))
Комментариев нет:
Отправить комментарий