Prosty Edytor Tekstowy Java

0

Cześć mam problem z napisaniem prostego edytora tekstu w Javie, a konkretnie problem z dwiema operacjami "Nowy" który ma czyścić panel roboczy z podanych oraz "Zapisz" która ma zapisywać obecny postęp w pisaniu.

Poniżej wstawiam mój kod:

package Zadanie8;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;


public class Main extends JFrame implements ActionListener{

    JMenuBar menuBar;
    JMenu menuPlik,menuAutor;
    JMenuItem mOtwórz,mZapisz,mWyjście, mNowy, mZapiszjako;
    JTextArea notatnik;
    public static void main(String[] args) {
        Main appMenu = new Main();
        appMenu.setVisible(true);
    }  
    public Main (){
        setTitle("Notatnik");
        setSize (800,800);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout (null);
        
        menuBar = new JMenuBar();
        menuPlik = new JMenu ("Plik");
        
        mOtwórz = new JMenuItem ("Otwórz..." );
        mOtwórz.addActionListener(this);
        mZapisz = new JMenuItem ("Zapisz");
        mZapisz.addActionListener(this);
        mWyjście = new JMenuItem ("Wyjście");
        mZapiszjako = new JMenuItem ("Zapisz jako...");
         mZapiszjako.addActionListener(this);
        mNowy = new JMenuItem ("Nowy");
        
        notatnik = new JTextArea();
        JScrollPane scrollPane = new JScrollPane(notatnik);
        scrollPane.setBounds(50,50,600,600);
        add(scrollPane);
                
        menuPlik.add (mNowy);
        menuPlik.add(mOtwórz);
        menuPlik.addSeparator();
        menuPlik.add (mZapisz);
        menuPlik.add (mZapiszjako);
        menuPlik.addSeparator();
        menuPlik.add (mWyjście);
        
        mWyjście.addActionListener(this);
        mWyjście.setAccelerator(KeyStroke.getKeyStroke("ctrl X"));
        
        menuAutor = new JMenu("O Autorze");
        menuAutor.addActionListener(null);
        
        
        setJMenuBar (menuBar);
        menuBar.add(menuPlik);
        menuBar.add(menuAutor);
        
    }

    @Override
    public void actionPerformed(ActionEvent e) {
       Object z = e.getSource();
       if (z==mOtwórz) {
           JFileChooser fc =new JFileChooser();
            if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
               
                File plik = fc.getSelectedFile();
                   
                try {
                       Scanner skaner = new Scanner(plik);
                        while (skaner.hasNext())
                            notatnik.append(skaner.nextLine()+"\n");
                        skaner.close();
                        
               } 
                catch (FileNotFoundException ex) {
                   Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
               }
            }
           
           
       }
       
       
       else if (z==mZapiszjako) {
           JFileChooser fc = new JFileChooser ();
           if (fc.showSaveDialog(null)==JFileChooser.APPROVE_OPTION){
               File plik = fc.getSelectedFile();
               try 
               {
                   PrintWriter zapis = new PrintWriter(plik);
                   Scanner skaner  = new Scanner (notatnik.getText());
                   while (skaner.hasNext())
                       zapis.println(skaner.nextLine()+ "\n");
                   zapis.close();
               } 
               
               catch (FileNotFoundException ex) {
                   Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
               }
           }
       }
        if (z==mWyjście)
       {
           dispose();
       } 
       else if (z==menuAutor){
           
           JOptionPane.showMessageDialog(this, "Autorem progarmu jest ...");
           
       }
    }
    
}

Link do Pastebina //pastebin.pl/view/4ca2c826

Czy ktoś z was mógłby mi podpowiedzieć w jaki sposób zrealizować te dwie czynności ?

Z góry dziękuje za pomoc :)

1

Czyszczenie pola tekstowego możesz zrobić w taki sposób:

notatnik .selectAll();
notatnik .replaceSelection("");

Dodatkowo sprawdź ten temat: https://4programmers.net/Forum/Java/259289-powie_mi_ktos_co_poprawic_z_gory_thx_notatnik_w_javie
Są ta wskazówki od @Shalom jak powinieneś ogarniać actionlistenery, zamiast bawić się w drabinkę ifów.

EDIT:

Co do zapisu, musisz rozpatrzeć kilka możliwości:

  1. Jeśli wcześniej użytkownik dokonał akcji "zapisz jako" tzn, że plik jest już utworzony, ty chcesz po prostu zupdatować w nim zmiany. W takiej sytuacji musisz gdzieś dodatkowo przechowywać informacje o ścieżce do pliku, żeby go zaktualizować. I właśnie na podstawie tej wartości możesz sprawdzać czy user już zapisywał czy nie.
  2. Jeśli nie było używane "zapisz jako" tzn, że w akcji "zapisz" musisz dokonać tego samego co w akcji "zapisz jako". Czyli otwierasz JFileChooser i zapisujesz nowy plik. Po prostu reużywasz gotową funkcje. - Tu kolejny TIP dla Ciebie, kod który się powtarza, który będziesz mógł użyć w kilku miejscach, wyrzuć do oddzielnej funkcji, aby go nie duplikowac.

1 użytkowników online, w tym zalogowanych: 0, gości: 1