Dodanie pliku do okienka.

Odpowiedz Nowy wątek
2017-12-04 21:24

Rejestracja: 5 lat temu

Ostatnio: 1 miesiąc temu

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?

Pozostało 580 znaków

2017-12-04 22:01
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 miesiąc temu

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)
            {...}
        }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2017-12-04 22:03

Rejestracja: 5 lat temu

Ostatnio: 1 miesiąc temu

0

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

Pozostało 580 znaków

2017-12-04 22:32
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 miesiąc temu

1

Niestety, trzeba to jakoś zrobić.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2017-12-04 23:08

Rejestracja: 5 lat temu

Ostatnio: 1 miesiąc temu

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)
                {

                }
            }
        }
    }

Pozostało 580 znaków

2017-12-05 01:20

Rejestracja: 5 lat temu

Ostatnio: 1 miesiąc temu

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();
    }
    }); 
    }

}

Pozostało 580 znaków

2017-12-05 11:18
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 miesiąc temu

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");

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2017-12-05 12:25

Rejestracja: 5 lat temu

Ostatnio: 1 miesiąc temu

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);
                }
            }

        }

Pozostało 580 znaków

2017-12-05 15:13
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 miesiąc temu

0

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2017-12-05 15:16

Rejestracja: 5 lat temu

Ostatnio: 1 miesiąc temu

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.

Pozostało 580 znaków

2017-12-05 15:34
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 miesiąc temu

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.

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

Odpowiedz

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