1 Востаннє редагувалося generation (22.03.2015 20:52:02)

Тема: моя перша програма на Java SE

Ну щось ледве подібне на текстовий редактор в мене вийшло(перша програма написана мною та не списана з посібників)... функціонал скупий та забагований, але мені потрібна ваша оцінка коду(щоб не звик погано писати код)
під спойлером код:

Прихований текст
package txtedit;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class TXTEdit extends JPanel {
    JTextArea area0;
    JFileChooser file;

    public void go()
    {
        //створюємо фрейм
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        //ініціалізація текстового поля
        area0 = new JTextArea(15, 50);
         area0.setWrapStyleWord(true);
         area0.setLineWrap(true);
         area0.setEditable(true);
        //реалізація меню 
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        fileMenu.add(new JMenuItem("Open")).addActionListener(new ActionChooserListener());
        fileMenu.add(new JMenuItem("Save")).addActionListener(new ActionSaveListener());
        //додавання меню до фрейму
        menuBar.add(fileMenu);
        frame.setJMenuBar(menuBar);
        //поле
        panel.add(new JScrollPane(area0));
        //налаштовуємо фрейм
        frame.add(BorderLayout.CENTER, panel);
        //останні налаштування
        frame.setSize(600, 350);
        frame.setResizable(false);
        frame.setVisible(true);
    }//close method go()

    //слухач для відкриття файлу
    class ActionChooserListener implements ActionListener
    {
        public void actionPerformed(ActionEvent ev)
        {
            //ініціалізація буферу
            BufferedReader reader = null;
            //відкриваємо вікно для вибору файлу
            file = new JFileChooser();
            
            int ret = file.showDialog(null, "Выберите файл");
            
            if (ret == JFileChooser.APPROVE_OPTION)
            {
                //чистимо поле
                area0.setText(null);
                
                try {
                    //організовуємо вивод файла
                    File f = file.getSelectedFile();
                    FileReader rFile = new FileReader(f);
                    reader = new BufferedReader(rFile);
                    //ініціалізація змінної
                    String str = null;
                    //вивод самого файла на єкран
                    while((str = reader.readLine()) != null)
                    {
                        area0.append(str + "\n");
                    }
                } catch (IOException e) {
                    //допишу колись
                }
                finally
                {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        //також допишу
                    }
                }
            }
        }
    }//close inner class ActionChooserListener
    //сдухач для зберігання файлу
    class ActionSaveListener implements ActionListener
    {
        public void actionPerformed(ActionEvent ev)
        {
            //ініціалізація змінної
            BufferedWriter writer = null;
            try {
                //створюємо замінні для зберігання файлу
                File f = file.getSelectedFile();
                FileWriter fw = new FileWriter(f);
                writer = new BufferedWriter(fw);
                //ініціалізація змінної
                String s = null;
                do {
                    //зберішаємо текст
                    s = area0.getText();
                    writer.write(s);
                } while(s != null);
                writer.close();
            } catch (IOException e) {
                //допишу
            }
        }
    }//close inner class ActionSaveListener
    
    public static void main(String[] args) {
        new TXTEdit().go();
    }//close method main();
}


П.С. код оцінюйте більш-менш критично, та пишіть як би краще було б реалізувати цей дефектний код...
/* доречі, щоб програма розуміла кирилицю, потрібно змінити кодування перед виводом файла? чи є ще якісь варіанти?
також, як отримати шлях котрий був вибраний користувачем використовуючи JFileChooser метод: showSaveDialog() ???
*/

Post's attachments

TXTEdit.jar 6.58 kb, 364 downloads since 2015-03-22 

Подякували: Chemist-i, leofun012

2

Re: моя перша програма на Java SE

Для наглядності можна відділяти окремі блоки коду пустою строкою, напр. в методі go після 17, 22, 27 і т. д. строк пуста строка (Enter).
Впринципі коментарі завершення методу непотрібні, щодо коментарів можеш почитати про JavaDoc.
Зараз відкриття файлів можна здійснювати за допомогою try with resources http://www.mkyong.com/java/try-with-res … -in-jdk-7/ це дозволяє пропускати блок finally (java сама все закриє).

Подякували: leofun011

3

Re: моя перша програма на Java SE

Ivan-ua написав:

Для наглядності можна відділяти окремі блоки коду пустою строкою, напр. в методі go після 17, 22, 27 і т. д. строк пуста строка (Enter).
Впринципі коментарі завершення методу непотрібні, щодо коментарів можеш почитати про JavaDoc.
Зараз відкриття файлів можна здійснювати за допомогою try with resources http://www.mkyong.com/java/try-with-res … -in-jdk-7/ це дозволяє пропускати блок finally (java сама все закриє).

ну, коментарів я за багато добавив задля ясності іншим користувачам, а сам використовую менше їх, здебільшого роблю відступи ентером... try з ресурсами я пізніше використаю...

4 Востаннє редагувалося fed_lviv (23.03.2015 18:28:01)

Re: моя перша програма на Java SE

Я не гуру, але свої п'ять копійок вставлю:
1. Якщо працюєте з SWINGом то запускайте "свою графіку" в потоці диспетчеризації подій, в книгах (поток обработки событий). Тобто в методі main: SwingUtilities.invokeLater()new Runnable(){public void run() {new TXTEdit()....;}});
2. Не зрозумів чого Ви наслідуєтесь від JPanel чим погано extends JFrame?
3. Меню, кнопки, тощо, я б краще робив таким конструктором JMenuItem(Action a) і робимо клас, який наслідується від AbstractAction.
4. Розбити все на окремі методи, а то у Вас все в одном методі.
5. Коментарі робив би краще, як книжка пише, щоб потім можна було за допомогою Javadoc все гарно оформити.
P.S. Ось це, що перше кидається в очі.

Подякували: Lujok1