Wiemy już jak stworzyć prosty program w Swingu, który umożliwia otwarcie pliku tekstowego, edytowanie go, a następnie zapisanie. Czasem jednak, potrzebujemy dokonać dodatkowych manipulacji z tekstem, na przykład zmienić automatycznie wielkość liter, czy zmienić ciąg znaków. Rozbudujmy więc nieco naszą aplikację.
Spójrzmy teraz do fragmentu poprzednio utworzonego programu, który wykonuje się gdy klikniemy przycisk „Otwórz„. Teraz wygląda on tak:
textArea.read( new FileReader( file.getAbsolutePath() ), null );
Nie wchodząc w szczegóły, tworzymy tu obiekt klasy FileReader
, który odczytuje plik i od razu przekazuje go do komponentu textArea
(klasy JTextArea
) w którym tekst jest wyświetlany i może być edytowany.
Co jednak, jeśli przed przekazaniem tekstu do kontrolki, chcemy go poddać jakiejś wstępnej obróbce? Jedną z możliwości, jest przekazanie wczytanego tekstu do zmiennej typu String
. Jak to zrobić? Można na przykład tak…
Usuńmy powyższy kod, a zamiast niego wstawmy taki:
BufferedReader br = new BufferedReader(new FileReader( file.getAbsolutePath() )); String linia; String tekst = ""; while ((linia = br.readLine()) != null) { tekst = tekst+linia+\n; } br.close(); tekst = tekst.toUpperCase(); textArea.setText(tekst);
Teraz, gdy wczytamy plik, otrzymamy taki obraz:
Jak widać, wszystkie litery w tekście, zostały zmienione na wielkie. Przyjrzyjmy się teraz powyższemu kodowi:
W pierwszej linijce tworzymy obiekt br
klasy BufferedReader
, któremu przekazujemy, jako argument FileReader
ze ścieżką do pliku jako argumentem.
Pętla while
, która rozpoczyna się w linii nr 4, pobiera z br
po kolei linie tekstu z pliku, które sukcesywnie przyłączamy do zmiennej string
. Jeśli nie chcemy, żeby cały tekst złączył się w jedną linię, należy pamiętać, żeby po dołączeniu linii do zmiennej, dodać też znak końca linii ("\n"
).
Następnie znajduje się komenda br.close()
, którą należy wykonać po odczytaniu pliku.
Ponieważ w zmiennej tekst
znajduje się cały tekst, który został odczytany z pliku, możemy dokonywać na nim wszelkich manipulacji dostępnych na łańcuchach znaków. Sporo przykładów można znaleźć tutaj. W powyższym przykładzie dokonujemy zmiany wszystkich liter na wielkie, za co odpowiedzialny jest kod w linii numer 8.
Teraz, można przekazać zmieniony tekst do kontrolki textArea
, wywołujemy więc na niej metodę setText()
podając jako argument nasz tekst (linia 9).
Tekst możemy powtórnie pobrać, modyfikować, po czym znów go aktualizować w oknie edycji. Dla przykładu dołóżmy do naszej aplikacji kolejny przycisk, który będzie na zmianę, po każdym naciśnięciu zmieniał wielkość liter. Zacznijmy od utworzenia zmiennej typu boolean
, która będzie przechowywała informację o wielkości liter. Znajdź w kodzie źródłowym początek klasy i dopisz linijkę nr. 2
public class OknoGlowne extends javax.swing.JFrame { boolean wielkie = true; ...
Ponieważ w naszym programie litery w tekście są od razu zmieniane na wielkie, domyślnie zmienna ma wartość true
.
Teraz dodajemy do aplikacji przycisk „Zmień” (nazwijmy go buttonZmien
) który po naciśnięciu powinien wykonywać taki kod:
private void buttonZmienActionPerformed(java.awt.event.ActionEvent evt) { String tekst = textArea.getText(); if(wielkie) { tekst = tekst.toLowerCase(); wielkie = false; } else { tekst = tekst.toUpperCase(); wielkie = true; } textArea.setText(tekst); }
Po wczytaniu pliku i przyciśnięciu przycisku „Zmień„, wielkość liter w oknie zmienia się.
Powyższy kod jest raczej oczywisty, może warto jednak zwrócić uwagę na rolę zmiennej wielkie
. Sygnalizuje ona stan wielkości liter w tekście. Jeśli jej wartość wynosi true
, oznacza to, że litery są wielkie. W takim przypadku po wciśnięcia klawisza „Zmień” uruchamiany jest kod tekst = tekst.toLowerCase()
, litery są zmieniane na małe, a wartość zmiennej wielkie
ustawiona jest na false
. Dlatego przy kolejnym naciśnięciu klawisza uruchamia się kod tekst = tekst.toUpperCase();
a zmienna przybiera ponownie wartość false
.
Leave a Reply
You must be logged in to post a comment.