StringBuilder - Java
Формулировка задачи:
Помогите исправить 2 ошибки.
Должен быть калькулятор, который юзает файл и сохраняет калькуляцию.
Ошибки выдает на методе append и getText.
Листинг программы
- package webstart;
- import java.awt.event.*;
- import java.beans.*;
- import java.io.*;
- import java.net.*;
- import javax.jnlp.*;
- import javax.swing.*;
- /**
- * Фрейм с панелью калькулятора и меню для загрузки и сохранения предысторий калькуляций.
- * Created by Михаил on 03.08.2016.
- */
- public class CalculatorFrame extends JFrame{
- private CalculatorPanel panel;
- public CalculatorFrame()
- {
- setTitle();
- panel = new CalculatorPanel();
- add(panel);
- JMenu fileMenu = new JMenu("File");
- JMenuBar menuBar = new JMenuBar();
- menuBar.add(fileMenu);
- setJMenuBar(menuBar);
- JMenuItem openItem = fileMenu.add("Open");
- openItem.addActionListener(EventHandler.create(ActionListener.class, this, "open"));
- JMenuItem saveItem = fileMenu.add("Save");
- saveItem.addActionListener(EventHandler.create(ActionListener.class, this, "save"));
- pack();
- }
- /**
- * Получает заголовок из постоянного хранилища или запрашивает
- * заголовок у пользователя, если он не был прежде сохранен
- */
- public void setTitle()
- {
- try
- {
- String title = null;
- BasicService basic =
- (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
- URL codeBase = basic.getCodeBase();
- PersistenceService service = (PersistenceService) ServiceManager.lookup("javax.jnlp.BasicService");
- URL key = new URL(codeBase, "title");
- try
- {
- FileContents contents = service.get(key);
- InputStream in = contents.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- title = reader.readLine();
- }
- catch (FileNotFoundException e)
- {
- title =
- JOptionPane.showInputDialog("Please supply a frame title:");
- if (title == null) return;
- service.create(key, 100);
- FileContents contents = service.get(key);
- OutputStream out = contents.getOutputStream(true);
- PrintStream printOut = new PrintStream(out);
- printOut.print(title);
- }
- setTitle(title);
- }
- catch (UnavailableServiceException e)
- {
- JOptionPane.showMessageDialog(this, e);
- }
- catch (MalformedURLException e)
- {
- JOptionPane.showMessageDialog(this, e);
- }
- catch (IOException e)
- {
- JOptionPane.showMessageDialog(this, e);
- }
- }
- /**
- * Открывает файл предыстории и обновляет отображаемый данные
- */
- public void open()
- {
- try
- {
- FileOpenService service = (FileOpenService) ServiceManager.lookup("javax.jnlp.FileOpenService");
- FileContents contents = service.openFileDialog(".", new String[] { "txt" });
- JOptionPane.showMessageDialog(this, contents.getName());
- if (contents != null)
- {
- InputStream in = contents.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- String line;
- while ((line = reader.readLine()) != null)
- {
- panel.append(line);
- panel.append("\n");
- }
- }
- }
- catch (UnavailableServiceException e)
- {
- JOptionPane.showMessageDialog(this, e);
- }
- catch (IOException e)
- {
- JOptionPane.showMessageDialog(this, e);
- }
- }
- /**
- * Сохраняет предысторию калькуляций в файле
- */
- public void save()
- {
- try
- {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- PrintStream printOut = new PrintStream(out);
- printOut.print(panel.getText());
- InputStream data = new ByteArrayInputStream(out.toByteArray());
- FileSaveService service = (FileSaveService) ServiceManager.lookup("javax.jnlp.FileSaveService");
- service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt");
- }
- catch (UnavailableServiceException e)
- {
- JOptionPane.showMessageDialog(this, e);
- }
- catch (IOException e)
- {
- JOptionPane.showMessageDialog(this, e);
- }
- }
- }
Листинг программы
- package webstart;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- /**
- * Created by Михаил on 03.08.2016.
- */
- public class CalculatorPanel extends JPanel {
- public CalculatorPanel() {
- setLayout(new BorderLayout());
- result = 0;
- lastCommand = "=";
- start=true;
- display = new JButton("Вводи");
- 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);
- }
- /**
- * Вводит кнопку на центральной панели
- * @param label Метка кнопки
- * @param listener Приемник действий кнопки
- */
- private void addButton(String label, ActionListener listener) {
- JButton button = new JButton(label);
- button.addActionListener(listener);
- panel.add(button);
- }
- /**
- * При обработке событий строка действия кнопки вводится
- * в конце отображаемого текста
- */
- private class InsertAction implements ActionListener
- {
- 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
- {
- 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;
- }
- }
- }
- /**
- * Выполняет ожидающую калькуляцию
- * @param x Значение, накапливаемое с учетом предыдущего результата
- */
- 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 JButton display;
- private JPanel panel;
- private double result;
- private String lastCommand;
- private boolean start;
- }
Решение задачи: «StringBuilder»
textual
Листинг программы
- private CalculatorPanel panel;
- panel.append(line);
- panel.append("\n");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д