Добрый день.
Только начал изучать программирование и написал маленький редактор на 600 строк. Захотел переписать в ООП стиле и получил кучу ... которая не работает.
В IDE я создал класс
Environment в котором инициализируются основные компоненты (Фрейм, текстовая область, вызывается класс
меню и класс
сервис (строка состояния процессов("файл открыт", "файл закрыт" и т.д.))). Существует еще один класс -
Document (хранит название файла, количество его символов и т.д.(потом буду отсылать это в класс Sevice).
Мои проблемы: я не могу нормально открыть из класса
меню файл и создать
документ открыв файл (был момент когда создавался еще один редактор, но текстовая область все равно оставалась пустой).
Но даже, если у меня получается создать документ и передать в него контент, я не могу передать этот же текст в
Environment.
Класс сервис - это метка внизу редактора которая должна постоянно обновлять свое содержимое (источник события документ и сама среда).
Вопросы
1. У кого нибудь есть схема проектирования такого приложения или кто может подсказать основные этапы реализации?
2. Скачал книги: Совершенный код и книга "Банды четырех". Они помогут на этом этапе?
Третий день вожусь с этой задачей. В Google был.
Update:
1. Как я понял мне нужно изучить
UML
2. Далее книги по архитектуре
программного обеспечения
---- Только после этого я должен уже уметь проектировать приложение - верно?
Неработающая куча ниже:
КЛАСС ЗАПУСКАimport javax.swing.*;
public class RunTextEditor {
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Environment();
}
});
}
}
КЛАСС СРЕДЫimport javax.swing.*;
import java.awt.*;
public class Environment {
public static JTextArea textArea;
private JFrame frame;
private MainMenu mainMenu;
private Container container;
private JScrollPane jScrollPane;
private Service statusMessage;
Environment()
{
frame = new JFrame("Text Editor");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new FlowLayout());
frame.setSize(270, 420);
textArea = new JTextArea();
jScrollPane = new JScrollPane(textArea);
jScrollPane.setPreferredSize(new Dimension(250, 200));
jScrollPane.getViewport().add(textArea);
mainMenu = new MainMenu();
frame.setJMenuBar(mainMenu.getMenuBar());
container = frame.getContentPane();
container.add(jScrollPane);
statusMessage = new Service();
container.add(statusMessage.getStatusMessage());
frame.setVisible(true);
}
public static JTextArea getTextArea()
{
return textArea;
}
}
КЛАСС ДОКУМЕНТpublic class Document {
private String fileName;
private String content;
private int caretPosition;
Document(String fn, int cp, String ct)
{
fileName = fn;
caretPosition = cp;
content = ct;
}
public void setCaretPosition(int x)
{
caretPosition = x;
}
}
КЛАСС МЕНЮБАРimport javax.swing.*;
public class MainMenu {
private JMenuBar menuBar;
private FileMenu fileMenu;
MainMenu()
{
menuBar = new JMenuBar();
fileMenu = new FileMenu();
menuBar.add(fileMenu.getFileMenu());
}
public JMenuBar getMenuBar()
{
return menuBar;
}
}
КЛАСС МЕНЮ-ФАЙЛimport javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FileMenu {
private JMenu menuFile;
private JMenuItem loadFile;
private JMenuItem saveFile;
private JFileChooser fileChooser;
private Service service;
FileMenu()
{
menuFile = new JMenu("File");
loadFile = new JMenuItem("Load");
loadFile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String fileName = "";
fileChooser = new JFileChooser();
service = new Service();
int result = fileChooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
fileName = fileChooser.getSelectedFile().getName();
} else {
service = new Service("No file selected.");
}
LoadFile loadFile = new LoadFile(fileName);
Environment.textArea.setText(loadFile.getContent());
}
});
saveFile = new JMenuItem("Save");
menuFile.add(loadFile);
menuFile.add(saveFile);
}
public JMenu getFileMenu()
{
return menuFile;
}
}
КЛАСС ЗАГРУЗКИ ФАЙЛАimport javax.swing.*;
import java.io.FileReader;
import java.io.IOException;
public class LoadFile{
private String fileName;
private static JTextArea textArea;
LoadFile(String name)
{
FileReader fw;
fileName = name;
Service statusMsg;
Document document;
textArea = new JTextArea();
if(name.length() == 0)
{
statusMsg = new Service("No filename present");
return;
}
try{
fw = new FileReader(fileName);
textArea.read(fw, null);
document = new Document(fileName, 0, textArea.getText());
fw.close();
}catch (IOException exc){
statusMsg = new Service("Error opening or reading file.");
return;
}
}
public static String getContent()
{
return textArea.getText();
}
}
КЛАСС СЕРВИСimport javax.swing.*;
import java.awt.*;
public class Service {
private JLabel statusMessage;
Service()
{
statusMessage = new JLabel("Test");
statusMessage.setPreferredSize(new Dimension(200, 30));
statusMessage.setHorizontalAlignment(SwingConstants.CENTER);
}
Service(String message)
{
statusMessage = new JLabel(message);
statusMessage.setPreferredSize(new Dimension(200, 30));
statusMessage.setHorizontalAlignment(SwingConstants.CENTER);
}
public JLabel getStatusMessage()
{
return statusMessage;
}
}