formatowanie tekstu

0

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>

0

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

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)

0

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 ??

0

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ń.

0

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.

0

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 :-(

0

A nie możesz wpisać tego tekstu z klawiatury a potem go sformatować?

0

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

0

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

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