Java - Kontrole za manipulaciju tekstom


JTextComponent

JTextComponent je apstraktna klasa koja se nalazi u osnovi svih Swing klasa koje sadrže tekst polja, odnosno kontrola koje podrazumevaju unos teksta. Ova kontrola nasljeđuje JComponent, ali njene nasljednike nije moguće postaviti na kontejner bez prethodne pripreme, kao što je moguće sa direktnim nasljednicima JComponenta. Ukoliko bismo pokušali da kreiramo klasu koja nasljeđuje JTextComponent i smestili je na panel, došlo bi do greške:





Na slici vidimo da JTextComponent nasljeđuju tri grupe kontrola: text, text area i styled text. Text kontrole su najjednostavnije kontrole za rukovanje tekstom. To su jednodimenzionalne kontrole koje nemaju mogućnost formatiranja niti stilizacije. Ove kontrole koristimo za unos male količine jednostavnih tekstualnih podataka (ime, prezime, matični broj, web adresa, email, naziv grada, naziv firme...).

Text area kontrole, tačnije kontrola JTextArea i njeni eventualni nasljednici, sadrže višelinijski tekst. Ova kontrola podrazumeva mogućnost primitivne stilizacije (izmjenu parametara fonta) pomoću metoda setFont(). Styled text kontrole su bogato stilizovane kontrole koje omogućavaju viši stepen manipulacije stilovima (kontrolu fontova, implementaciju slika...), a pored toga, i parsiranje HTML sadržaja. Ove kontrole često se koriste za prezentaciju nekog HTML sadržaja. JTextComponent API omogućava osnovne operacije nad tekstom unutar kontrole:

  • čitanje i postavljanje teksta,
  • rukovanje selekcijom,
  • rukovanje kursorom,
  • copy/paste,
  • čitanje, pisanje iz fajla.

Sve kontrole koje nasljeđuju ovu klasu, nasljeđuju i pomenute funkcionalnosti.



JTextField

Objekt klase JTextField je tekstualna komponenta koja omogućava uređivanje teksta u jednom redu. Nasljeđuje klasu JTextComponent. Pogledajmo deklaraciju za klasu javax.swing.JTextField:

public class JTextField extends JTextComponent implements SwingConstants  

Često korišteni konstruktori:

Konstruktor Opis
JTextField() Kreira novo TextField
JTextField (String text) Kreira novo TextField inicijaliziran navedenim tekstom.
JTextField(String text, int columns) Kreira novo TextField inicijaliziran navedenim tekstom i kolonom.
JTextField(int columns) Kreira novo prazno TextField sa navedenim brojem kolona.

Najčešće korištene metode:

Metoda Opis
void addActionListener(ActionListener l) Koristi se za dodavanje specificiranog slušatelja radnje za primanje događaja akcije iz ovog tekstualnog polja.
Action getAction() Vraća trenutno postavljenu radnju za ovaj izvor događaja ActionEvent ili null ako nije postavljena nijedna radnja.
void setFont(Font f) Koristi se za postavljanje trenutnog fonta.
void removeActionListener(ActionListener l) Koristi se za uklanjanje specifikovanog slušatelja radnje tako da više ne prima događaje akcije iz ovog tekstualnog polja.

Primjer: Java JTextField

import javax.swing.*;  
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;

class Main  
{  
public static void main(String args[]){  
    
        JFrame f= new JFrame("Primjer TextField");  
        JTextField t1,t2;  

        t1=new JTextField("Volim učiti Javu uz IT TUTORIJALE.");  
        t1.setBounds(50,100, 200,30); 

        t2=new JTextField("IT TUTORIJALI");  
        t2.setBounds(50,150, 200,30);

        f.add(t1); f.add(t2);  
        f.setSize(400,400);  
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        f.setLayout(null);  
        f.setVisible(true);  
    }  
}

Prikaz koda iz gornjeg primjera izgledaće ovako:




Primjer: Java JTextField sa ActionListenerom

import javax.swing.*;
import java.awt.event.*;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;

public class Main implements ActionListener{  
    JTextField tf1,tf2,tf3;  
    JButton b1,b2;  
    Main(){  
        JFrame f= new JFrame();  
        
        tf1=new JTextField();  
        tf1.setBounds(50,50,150,20);  
        
        tf2=new JTextField();  
        tf2.setBounds(50,100,150,20); 
        
        tf3=new JTextField();  
        tf3.setBounds(50,150,150,20); 
        tf3.setEditable(false); 
        
        b1=new JButton("+");  
        b1.setBounds(50,200,50,50);  
        
        b2=new JButton("-");  
        b2.setBounds(120,200,50,50);  
        
        b1.addActionListener(this);  
        b2.addActionListener(this);  
        
        f.add(tf1);f.add(tf2);f.add(tf3);f.add(b1);f.add(b2);  
        f.setSize(300,300);  
        f.setLayout(null);  
        f.setVisible(true);  
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }         
    public void actionPerformed(ActionEvent e) {  
        String s1=tf1.getText();  
        String s2=tf2.getText();  
        int a=Integer.parseInt(s1);  
        int b=Integer.parseInt(s2);  
        int c=0;  
        if(e.getSource()==b1){  
            c=a+b;  
        }else if(e.getSource()==b2){  
            c=a-b;  
        }  
        String result=String.valueOf(c);  
        tf3.setText(result);  
    }  
    public static void main(String[] args) {  
        new Main();  
    } 
}

Prikaz koda iz gornjeg primjera izgledaće ovako:





JTextArea

Objekt klase JTextArea je višelinijska regija koja prikazuje tekst. Omogućava uređivanje teksta u više redova. Nasljeđuje klasu JTextComponent. Pogledajmo deklaraciju za klasu javax.swing.JTextArea:

public class JTextArea extends JTextComponent  

Često korišteni konstruktori:

Konstruktor Opis
JTextArea() Kreira tekstualno područje koje u početku ne prikazuje tekst.
JTextArea(String s) Kreira tekstualno područje koje u početku prikazuje navedeni tekst.
JTextArea(int row, int column) Kreira tekstualno područje sa navedenim brojem redova i kolona koje u početku ne prikazuje tekst.
JTextArea(String s, int row, int column) Kreira tekstualno područje s određenim brojem redova i kolona koje prikazuju navedeni tekst.

Najčešće korištene metode:

Metoda Opis
void setRows(int rows) Koristi se za postavljanje određenog broja redova.
void setColumns(int cols) Koristi se za postavljanje određenog broja kolona.
void setFont(Font f) Koristi se za postavljanje specifikovanog fonta.
void insert(String s, int position) Koristi se za umetanje navedenog teksta na određenu poziciju.
void append(String s) Koristi se za dodavanje datog teksta na kraj dokumenta.

Primjer: Java JTextArea

import javax.swing.*;  
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;

public class Main  
{  
     Main(){  
        JFrame f= new JFrame();  
        
        JTextArea area=new JTextArea("Volim učiti Javu uz IT TUTORIJALE");  
        area.setBounds(10,30, 200,200);  
        
        f.add(area);  
        f.setSize(300,300);  
        f.setLayout(null);  
        f.setVisible(true);  
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
     }  
    public static void main(String args[])  
    {  
        new Main();  
    }
} 

Prikaz koda iz gornjeg primjera izgledaće ovako:




Primjer: Java JTextArea sa ActionListenerom

import javax.swing.*;  
import java.awt.event.*;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;

public class Main implements ActionListener{  
   JLabel l1,l2;  
   JTextArea area;  
   JButton b;  
   
    Main() {  
        JFrame f= new JFrame();

        l1=new JLabel();  
        l1.setBounds(50,25,100,30); 

        l2=new JLabel();  
        l2.setBounds(160,25,100,30); 

        area=new JTextArea();  
        area.setBounds(20,75,250,200); 

        b=new JButton("Pokreni brojač");  
        b.setBounds(100,300,120,30);  
        b.addActionListener(this);  

        f.add(l1);f.add(l2);f.add(area);f.add(b);  
        f.setSize(450,450);  
        f.setLayout(null);  
        f.setVisible(true);  
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }  
    public void actionPerformed(ActionEvent e){  
        String text=area.getText();  
        String words[]=text.split("\\s");  
        l1.setText("Riječi: "+words.length);  
        l2.setText("Karaktera: "+text.length());  
    }  
    public static void main(String[] args) {  
        new Main();  
    }  
} 

Prikaz koda iz gornjeg primjera izgledaće ovako: