Dodanie pliku do okienka.

0

Mam zrobić prosty okienkowy edytor tekstu i mam pytanie: jeśli FileChooser() wybiorę jakiś plik to w jaki sposób dodać jego zawartość do JTextArea a następnie jej zawartość zapisać do tego samego pliku?

0

Odczytanie pliku:

        if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
        {
            File file = fc.getSelectedFile();
            try
            (
                Scanner sc = new Scanner(file);
            )
            {
                ta.setText("");
                while(sc.hasNextLine())
                {
                    ta.append(sc.nextLine() + "\n");
                }
            }
            catch(Exception e)
            {...}
        }
0

Ok dzięki a zmiany w tym pliku zostaną zapisane czy trzeba to jakoś zrobić

1

Niestety, trzeba to jakoś zrobić.

0

Chcę, żeby po kliknięciu w przycisk pojawił się JFileChooser. Mam coś takiego, ale nie działa i nie wiem dlaczego (action listner dodany do przycsku):

public void actionPerformed(ActionEvent action) {
		Object source = action.getSource();
		if(source == wczytaj)
		{
			if(fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
			{
				File file = fc.getSelectedFile();
				try(Scanner sc = new Scanner(file);)
				{
					ta.setText("");
					while(sc.hasNextLine())
					{
						ta.append(sc.nextLine() + "\n");
					}
				}
				catch(Exception e)
				{
					
				}
			}
		}
	}
0

cały kod:

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.io.File;

public class edytor extends JFrame implements ActionListener{
	private JTextArea ta;
	private JButton wczytaj;
	private JButton zapisz;
	private JButton zakoncz;
	private JFileChooser fc = new JFileChooser();
	FileFilter filter = new FileNameExtensionFilter("Pliki tekstowe", "txt");
	//fc.addChoosableFileFilter(filter);
	
	private JPanel panel()
	{
		JPanel mp = new JPanel();
		mp.setLayout(new BoxLayout(mp, BoxLayout.Y_AXIS));
		mp.setPreferredSize(new Dimension(80, 1400));
		JPanel menu = new JPanel();
		JButton wczytaj = new JButton("Wczytaj plik");
		wczytaj.setFont(new Font("Comic Sans", Font.BOLD, 20));
		wczytaj.addActionListener(this);
		wczytaj.setPreferredSize(new Dimension(200, 60));
		menu.add(wczytaj);
		JButton zapisz = new JButton("Zapisz plik");
		zapisz.setFont(new Font("Comic Sans", Font.BOLD, 20));
		zapisz.addActionListener(this);
		zapisz.setPreferredSize(new Dimension(200, 60));
		menu.add(zapisz);
		JButton zakoncz = new JButton("Zakończ");
		zakoncz.setFont(new Font("Comic Sans", Font.BOLD, 20));
		zakoncz.addActionListener(this);
		zakoncz.setPreferredSize(new Dimension(200, 60));
		menu.add(zakoncz);
		mp.add(menu);
		JTextArea ta = new JTextArea(200, 1200);
		ta.setEditable(true);
		ta.setFont(new Font("Serif", Font.PLAIN, 20));
		ta.setLineWrap(true);
		ta.setWrapStyleWord(true);
		ta.setCaretPosition(ta.getDocument().getLength());
		JScrollPane sp = new JScrollPane(ta);
		sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		sp.setPreferredSize(new Dimension(250, 700));
		mp.add(sp);
		return mp;
	}
	
	public edytor()
	{
		super();
		this.getContentPane().add(this.panel());
	}
	
	public static void okno()
	{
		edytor e = new edytor();
		e.setDefaultCloseOperation(EXIT_ON_CLOSE);
		e.pack();
		e.setLocation(200, 0);
		e.setTitle("Edytor tekstu");
		e.setSize(1500, 1000);
		e.setResizable(true);
		e.setVisible(true);
	}
	
	@Override
	public void actionPerformed(ActionEvent action) {
		Object source = action.getSource();
		if(source == wczytaj)
		{
			int ret = fc.showOpenDialog(null);
			if(ret == JFileChooser.APPROVE_OPTION)
			{
				File file = fc.getSelectedFile();
				try
				{
					ta.read(new FileReader(file.getAbsolutePath()), null);
				}
				catch(Exception e)
				{
					ta.setText("Nie mogę otworzyć pliku: "+file.getAbsolutePath());
					ta.setText("Problem " + e);
				}
			}
		}
		else if(source == zapisz)
		{
			setBackground(Color.GREEN);
		}
		else if(source == zakoncz)
		{
			dispose();
		}
	}
	
	public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
	public void run() {
		okno();
	}
	});	
	}
		
}
```

```
0

Masz dwie zmienne o nazwie wczytaj

  • pole w klasie - ma ono wartość null i nie ma podpiętego listenera
  • zmienna lokalna konstruktora - nie jest nullem i ma listenera
    Porównanie (w metodzie actionPerformed)
  if(source == wczytaj)

odwołuje się do pola w klasie.
Poprawienie polega na zmianie wiersza

JButton wczytaj = new JButton("Wczytaj plik");
//na
wczytaj = new JButton("Wczytaj plik");
0

Ok dzięki. Prosty błąd. Mam teraz taki zapis tylko jak dodam coś linijkę niżej to skleja obok jak to poprawić

else if(source == zapisz)
		{
			zapisz.setBackground(Color.GREEN);
			zapisz.setForeground(Color.BLACK);
			if(fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION)
			{
				File file = fc.getSelectedFile();
				try
				{
					FileWriter out = new FileWriter(file);
					out.write(ta.getText());
					out.close();

				}
				catch(Exception e)
				{
					ta.setText("Błąd zapisu:" + file.getAbsolutePath());
					ta.setText("Problem" + e);
				}
			}
			
		}

0

Jak zauważyłeś to sklejenie? Otworzyłeś zapisany plik w notatniku?

0

Tak, jak otworzę zapisany plik w notatniku to linijki są obok siebie, ale jak wczytam ponownie do programu to jest ok , więc nie wiem czy to sposób edycji w notatniku czy błąd kodu.

0

To jest usterka notatnika, który rozumie tylko jeden znak końca wiersza "\r\n" - używane są również "\n" oraz "\r". Wszystkie edytory (poza upośledzonym notatnikiem) - również windowsowe - rozumieją wszystkie znaki końca wiersza. Masz wybór:

  • nie oglądaj pliku w notatniku,-
  • zmienić wartość stałej line.separator.
0

ok. Dzięki za pomoc

I jeszcze jedno pytanko, jest jakaś metoda, żeby umożliwić wczytanie wszystkich plików tekstowych czy ręcznie muszę dopisać w FileFilter?
I dlaczego to nie działa: (JButton z podpietym ActionListnerem)

else if(source == male)
		{
			String text = ta.getText();
			text.toLowerCase();
			ta.setText(text);
		}

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