# JEditorPane -> Zeilenumbruch



## ByeBye 31659 (20. Juni 2006)

Hallo,

ich habe mir einen kleinen HTMLEditor selber gebaut, der aber nur die Schrift auf Fett, Kursiv und Unterstrichen einstellen kann. Nun ist mir aufgefallen, das er bei einem Zeilenumbruch kein "<br>" setzt, so das in den HTML Seiten kein Zeilenumbruch vorhanden ist.

Weiß jemand wie ich das lösen kann, dass er beim Betätigen der Enter-Taste an der Stelle ein "<br>" einsetzt?

Hier mein Cde für den HTMLEditor:

```
public class HTMLEditor extends JPanel {

	private JButton btnFat = null;
	private JButton btnItalic = null;
	private JButton btnUnderline = null;
	
	private JScrollPane scrPane = null;
	private JEditorPane editPane = null;
	private JPanel panActions = null;
	private HTMLEditorKit htmlEditorKit = null;
	
	/**
	 * Standardconstructor, initialisert die Komponenten, erstellt die grafische Oberfläche und setzt die Listener
	 *
	 */
	public HTMLEditor(){
		initComponents();
		drawGUI();
		setListeners();
	}
	/**
	 * Erstellt die grafische Oberfläche
	 *
	 */
	private void drawGUI(){
		setLayout(new BorderLayout());
		
		panActions.setLayout(new FlowLayout(FlowLayout.LEFT));		
		
		scrPane.setPreferredSize(new Dimension(300, 100));
		
		// TExtarea wird auf HTML umgestellt
		editPane.setEditorKit(htmlEditorKit);
		
		// Die HTML Funktionsbuttons, Fett, Kursiv und Uuterstrichen
		panActions.add(btnFat);
		panActions.add(btnItalic);
		panActions.add(btnUnderline);
		
		add(scrPane, BorderLayout.CENTER);
		add(panActions, BorderLayout.SOUTH);
	}
	
	/**
	 * Initialisierung der Komponenten
	 *
	 */
	private void initComponents(){
		btnFat = new JButton("F");
		btnItalic = new JButton("K");
		btnUnderline = new JButton("U");
				
		editPane = new JEditorPane();
		scrPane = new JScrollPane(editPane);
		panActions = new JPanel();
		
		htmlEditorKit = new HTMLEditorKit();
	}
	
	/**
	 * Setzt die Listener
	 *
	 */
	private void setListeners(){
		
		// Der selektierte Text wird auf Fett gestellt oder sollte dieser bereits Fett sein, so wird er auf Normal gestellt 
		btnFat.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				boolean bold = false;
				
				SimpleAttributeSet attributeSet = new SimpleAttributeSet();	
				DefaultStyledDocument styledDoc = (DefaultStyledDocument) editPane.getDocument();		

				for (int i = 0; i < (editPane.getSelectionEnd()-editPane.getSelectionStart());i++){
					if (StyleConstants.isBold(styledDoc.getCharacterElement(editPane.getSelectionStart()+i).getAttributes())){	
						bold = true;
					}
				}
				
				if (bold){
					StyleConstants.setBold(attributeSet, false);	
				}
				else{
					StyleConstants.setBold(attributeSet, true);
				}
				styledDoc.setCharacterAttributes(editPane.getSelectionStart(), editPane.getSelectionEnd()-editPane.getSelectionStart(), attributeSet, false);
				editPane.select(editPane.getSelectionStart(), editPane.getSelectionEnd());
			}
		});
		
		// Der selektierte Text wird auf Kursiv gestellt oder sollte dieser bereits Kursiv sein, so wird er auf Normal gestellt
		btnItalic.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				boolean italic = false;
				
				SimpleAttributeSet attributeSet = new SimpleAttributeSet();			
				DefaultStyledDocument styledDoc = (DefaultStyledDocument) editPane.getDocument();					

				for (int i = 0; i < (editPane.getSelectionEnd()-editPane.getSelectionStart());i++){
					if (StyleConstants.isItalic(styledDoc.getCharacterElement(editPane.getSelectionStart()+i).getAttributes())){	
						italic = true;
					}
				}
				
				if (italic){
					StyleConstants.setItalic(attributeSet, false);	
				}
				else{
					StyleConstants.setItalic(attributeSet, true);
				}
				styledDoc.setCharacterAttributes(editPane.getSelectionStart(), editPane.getSelectionEnd()-editPane.getSelectionStart(), attributeSet, false);
				editPane.select(editPane.getSelectionStart(), editPane.getSelectionEnd());				
			}
		});
		
		//Der selektierte Text wird unterstrichen oder sollte dieser bereits unterstrichen sein, so wird er auf Normal gestellt
		btnUnderline.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				boolean underline = false;
				
				SimpleAttributeSet attributeSet = new SimpleAttributeSet();			
				DefaultStyledDocument styledDoc = (DefaultStyledDocument) editPane.getDocument();					

				for (int i = 0; i < (editPane.getSelectionEnd()-editPane.getSelectionStart());i++){
					if (StyleConstants.isUnderline(styledDoc.getCharacterElement(editPane.getSelectionStart()+i).getAttributes())){	
						underline = true;
					}
				}
				
				if (underline){
					StyleConstants.setUnderline(attributeSet, false);	
				}
				else{
					StyleConstants.setUnderline(attributeSet, true);
				}
				styledDoc.setCharacterAttributes(editPane.getSelectionStart(), editPane.getSelectionEnd()-editPane.getSelectionStart(), attributeSet, false);
				editPane.select(editPane.getSelectionStart(), editPane.getSelectionEnd());				
			}
		});
	}
	
	/**
	 * Liefert den HTML-Text zurück
	 * @return Liefert den HTML-Text zurück
	 */
	public String getText(){
		return editPane.getText();
	}
	
	/**
	 * Setzt den HTML-Text
	 * @param Text Setzt den HTML-Text
	 */
	public void setText(String Text){
		editPane.setText(Text);
	}
	
	/**
	 * Gibt an, ob die Komponenten aktiv oder inaktiv sind, also sind diese anklickbar
	 * @param status Bearbeitungsstatus
	 */
	public void statusComponents(boolean status){
		btnFat.setEnabled(status);
		btnItalic.setEnabled(status);
		btnUnderline.setEnabled(status);
		editPane.setEnabled(status);
	}
	
}
```


----------



## Thomas Darimont (20. Juni 2006)

Hallo!

Schau mal hier:
http://forum.java.sun.com/thread.jspa?forumID=257&threadID=410673

Btw. ich glaube statt der normalen JButtons solltest du besser JToggleButtons verwenden.

Gruss Tom


----------



## ByeBye 31659 (20. Juni 2006)

Hi, 

ich hab mir das angeschaut bzw. durchgelesen dun ein paar Sachen davon versucht, habe es aber irgendwie nicht ganz geschafft. Was mir auffällt ich bekomme auch keine <p> Tags wie in dem Beispiel da...

Kannst Du mir da eventuell noch einen Anstoss geben, vielleicht sogar auf meinen Fall direkt bezogen?


----------



## JavaSugar (30. Oktober 2006)

Hallo Tom,

ich habe bis jetzt ab und zu diverse Beiträge-Foren angeschaut, um einige Lösungen für meine Java-Probleme einzusetzen. Du scheinst, dich mit java-Problemen gut auszukennen. Daher möchte mich mich an dich wenden und fragen, weshalb ein real primitiver kurzer Java-Code, der folgendes beschrieben wird, nicht ganz funtkioniert:

...
// Test-Datei enhält ein kurzes Text-Beispiel zum Testen
File file = new File("files/text/Test.htm");

JTextPane pane = new JTextPane();
pane.setPage(file.toURL());
pane.setEditable(false);

StyledDocument doc = pane.getStyledDocument();

String strText = doc.getText(0, doc.getLength());				

// Stelle suchen
int iIndex = sText.indexOf("irgendetwas");

// gefundenen String im Text markieren        
if (iIndex > -1){
System.out.println("Gefunden");
}
...

Mein Ziel ist, nur den Inhalt ohne HTML-Tags zu kriegen. Beim Programmstart wird aber kein gefüllter String-Text durch die getText-Methode der StyledDocument-Klasse zurückgegeben, also nur Leere. Wenn man diesen Code mit Hilfe Debugger schrittweise geht, wird der String-Text wirklich zurückgegeben, dass irgendetwas im Text gefunden wird. Wieso klappt es aber ohne Debugger nicht

Wäre dir für deine Lösung/Idee dankbar!!

Greetings

JavaSugar ;-)


----------

