Witam robie podstawowy edytor tekstu. I <ort>stanołem </ort>w jednym miejscu :-(
Jak zrobić żeby bo napisaniu jakiekoś wyrazu w JTextField i potem wybrania wielkości czcionki koloru i formatu i koloru tła została wyświetlona w JTextArea po naciśnieciu przycisku.
proszę o jakieś rady.
Dzięki</ort>
Proponuję zamiast JTextArea użyć JEdytorPane, a do utworzenia akcji StyledEditorKit. Przykładowy kod dla pogrubienia czcionki:
JButton bBold = new JButton();
bBold.setAction(new StyledEditorKit.BoldAction());
tak jak luuki mówił możesz użyć editorpane
dodatkowo może on obsługiwać taki html'a (jak mu ustawisz odpowiedni content-type), więdz, możesz umieszczać tam tekst formatowany jako html (ze wszystkimi atrybutami tego języka w stylu font color)
Nie zabardzo rozumiem jak zrobić :-( programowanie nie zabardzo mi wychodzi :-(
mam już zrobione takie coś:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Edytor extends JFrame{
JButton przycisk;
JLabel etykieta;
JLabel etykieta1;
JLabel etykieta2;
JLabel etykieta3;
JLabel etykieta4;
JTextField tekst;
JTextArea poletekstowe;
JPanel panellewy;
JPanel panelprawy;
JPanel wyb;
JList kolortla;
JComboBox rozmiarczcionki;
public Edytor (String Edytor){
super (Edytor);
//menadzer ustawiania obiektów ręcznie
setLayout (null);
//menadzer ustwiania obiektów automatycznie
//setLayout (new FlowLayout());
//lub
//setLayout (new GridLayout(3,3));
// LEWA STRONA !!!
etykieta = new JLabel("Podaj tekst");
//do ręcznego ustawiania obiektów
etykieta.setSize(80,20); //rozmiar obiektu
etykieta.setLocation(70,50); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
etykieta.setForeground(Color.white);
add(etykieta);
tekst = new JTextField(10);
tekst.setSize(100,30); //rozmiar obiektu
tekst.setLocation(160,50); //punkt zaczepienia obiektu
add(tekst);
przycisk = new JButton("Wpisz");
//do ręcznego ustawiania obiektów
przycisk.setSize(100,20); //rozmiar obiektu
przycisk.setLocation(300,50); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
add(przycisk);
poletekstowe = new JTextArea();
//do ręcznego ustawiania obiektów
poletekstowe.setSize(400,550); //rozmiar obiektu
poletekstowe.setLocation(50,110); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
add(poletekstowe);
panellewy = new JPanel();
//do ręcznego ustawiania obiektów
panellewy.setSize(512,768); //rozmiar obiektu
panellewy.setLocation(0,0); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
panellewy.setBackground(Color.blue);//kolor panela
add(panellewy);
// PRAWA STRONA !!!
etykieta1 = new JLabel("Rozmiar czcionki:");
//do ręcznego ustawiania obiektów
etykieta1.setSize(180,20); //rozmiar obiektu
etykieta1.setLocation(570,50); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
etykieta1.setForeground(Color.black);
add(etykieta1);
JComboBox rozmiarczcionki = new JComboBox();
rozmiarczcionki.addItem("8");
rozmiarczcionki.addItem("10");
rozmiarczcionki.addItem("12");
rozmiarczcionki.addItem("14");
rozmiarczcionki.setSize(100,30); //rozmiar obiektu
rozmiarczcionki.setLocation(680,50); //punkt zaczepienia obiektu
add(rozmiarczcionki);
etykieta2 = new JLabel("Kolor czcionki:");
//do ręcznego ustawiania obiektów
etykieta2.setSize(180,20); //rozmiar obiektu
etykieta2.setLocation(570,150); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
etykieta2.setForeground(Color.black);
add(etykieta2);
//przyciski radiowe
ButtonGroup bg = new ButtonGroup();
JRadioButton radio1 = new JRadioButton("czerwony");
JRadioButton radio2 = new JRadioButton("zielony");
JRadioButton radio3 = new JRadioButton("niebieski");
JRadioButton radio4 = new JRadioButton("czarny");
bg.add(radio1);
bg.add(radio2);
bg.add(radio3);
bg.add(radio4);
JPanel jp = new JPanel(new GridLayout(0, 1));//panel do umieszczenia przycisków radiowych
jp.setBackground(Color.white);//kolor panela
//do ręcznego ustawiania obiektów
jp.setSize(120,100); //rozmiar obiektu
jp.setLocation(580,170); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
//kolor panela
jp.add(radio1);
jp.add(radio2);
jp.add(radio3);
jp.add(radio4);
radio1.setBackground(Color.green);
radio2.setBackground(Color.green);
radio3.setBackground(Color.green);
radio4.setBackground(Color.green);
add(jp);
etykieta3 = new JLabel("Typ czcionki:");
//do ręcznego ustawiania obiektów
etykieta3.setSize(180,20); //rozmiar obiektu
etykieta3.setLocation(570,290); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
// etykieta3.setForeground(Color.black);
add(etykieta3);
//przyciski wyboru
JPanel wyb = new JPanel(new GridLayout(0, 1));
JCheckBox wyb1 = new JCheckBox("bold");
JCheckBox wyb2 = new JCheckBox("italic");
// JCheckBox wyb3 = new JCheckBox("normal");
//do ręcznego ustawiania obiektów
wyb.setSize(100,72); //rozmiar obiektu
wyb.setLocation(580,305); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
wyb.add(wyb1);
wyb.add(wyb2);
// wyb.add(wyb3);
wyb1.setBackground(Color.green);
wyb2.setBackground(Color.green);
// wyb3.setBackground(Color.green);
add(wyb);
etykieta4 = new JLabel("Kolor tła:");
//do ręcznego ustawiania obiektów
etykieta4.setSize(180,20); //rozmiar obiektu
etykieta4.setLocation(570,390); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
//etykieta4.setForeground(Color.black);
add(etykieta4);
List kolortla =new List();
kolortla.add("czerwony");
kolortla.add("zielony");
kolortla.add("niebieski");
//do ręcznego ustawiania obiektów
kolortla.setSize(180,43); //rozmiar obiektu
kolortla.setLocation(570,410); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
JScrollPane s = new JScrollPane(kolortla);
s.setSize(8,3); //rozmiar obiektu
s.setLocation(570,410); //punkt zaczepienia obiektu
add(s);
add(kolortla);
panelprawy = new JPanel();
//do ręcznego ustawiania obiektów
panelprawy.setSize(512,768); //rozmiar obiektu
panelprawy.setLocation(512,0); //punkt zaczepienia obiektu
//koniec ręcznego ustawiania obiektów
panelprawy.setBackground(Color.green);
add(panelprawy);
pack();
}
public static void main (String arg []){
Edytor Word = new Edytor ("Edytor");
Word.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// rozmiar okna
Word.setSize(1024,768);
Word.setVisible(true);
}
}
I teraz jak zrobić żeby po wpisaniu w JTextField i np zaznaczeniu rozmiaru czcionki , koloru, formatu czcionki i koloru tła po naciśnieciu pzycisku "Wpisz" wpisało już zmieniony tekst do JTextArea ?? Jakieś propozycje macie ??
Podaje fragment Twojego kodu z modyfikacjami:
przycisk = new JButton("B");
przycisk.setSize(100,20);
przycisk.setLocation(300,50);
add(przycisk);
przycisk.setAction(new StyledEditorKit.BoldAction());
Dodatkowo zamiast
JTextArea poletekstowe;
wpisz JEditorPane poletekstowe;
i w konstruktorze edytora zmień konstruktor <code class="cpp"> poletekstowe = new JEditorPane();
Teraz jeśli wpiszesz tekst do pola tekstowego, zaznaczysz go i klikniesz na przycisk tekst będzie pogrubiony.
Nie wiem dlaczego wybrałeś wpisywanie tekstu przez pole JTextField, przecież w edytorach tekstowych nie stosuje się takich rozwiązań.
To musi być tak jak ja pisze bo tak mi kazano na zajęciach :-( Chociaż wiem że lepiej byłoby tak jak ty to robisz.
Zrobiłem już że jak wpisze tekst do JTextField po kliknięciu na przycisk wpisuje mi do JTextArea. Jeszcze jak pomożecie coś jak formatować tą czcionkę to będę wdzięczny.
Z ciekawości zrobiłem tak jak mi pisałeś ale jest jeden problem .Ponieważ JEditor Pane nie obsługuje append i stanołem w miejscu :-( bo Co mi z tego że zmienie sobie kolor czcionki jak nie potrafie jej dodać do JEditorPane :-(
A nie możesz wpisać tego tekstu z klawiatury a potem go sformatować?
Właśnie że nie. Ma wyglądać tak jak pokazałem wyżej. Że wpisuje tekst klikam na przycisk i on ma już sformatowany być w JTextArea
Jeśli tak, to na podstawie ustawień musisz utworzyć odpowiedni styl. Oto przykład:
SimpleAttributeSet centeredBlackText = new SimpleAttributeSet();
StyleConstants.setForeground(centeredBlackText, Color.black);
StyleConstants.setAlignment(centeredBlackText, StyleConstants.ALIGN_CENTER);
SimpleAttributeSet largeBlackText = new SimpleAttributeSet();
StyleConstants.setForeground(largeBlackText, Color.black);
StyleConstants.setFontSize(largeBlackText, 32);
Następnie wstawiasz tekst:
try {
Document doc = poletekstowe.getDocument();
doc.insertString(doc.getLength(), "Tekst\n", centeredBlackText);
}
catch(BadLocationException exp) {
exp.printStackTrace();
}