Hi, ich habe ein kleines Problem und hoffe jemand kann mir helfen. Ich habe ein JEditorPane vom Typ "text/html" zur Texteingabe. Über Buttons möchte ich die horizontale Textausrichtung für den selektierten Textabschnitt anpassen. Dies funktioniert einwandfrei, solange kein text mit setText(txt) gesetzt wurde (z.B. gespeicherten Text weiterbearbeiten möchte). Optisch funktioniert dies zwar weiterhin, jedoch gibt mir Methode getText() nur die Paragraphen mit den alten Ausrichtungen wieder (die Ausrichtung im p-Tag wird dann einfach nicht mehr übernommen, andere Attribute z.B. Textfarbe sind kein Problem). Mit der Schaltfläche "print to console" kann ich mir den HTML-Text auf der Console anzeigen lassen.
Ausgabe als HTML Text der Methode getText vom JEditorPane:
<html>
<head>
</head>
<body>
<p align="left" style="margin-top: 0">
A
</p>
<p align="center" style="margin-top: 0">
B
</p>
<p align="right" style="margin-top: 0">
C
</p>
</body>
</html>
Mit der Schaltfläche "setText" wird ePane.setText(ePane.getText) aufgerufen, danach wird die Ausrichtung im HTML-Text nicht mehr korrekt gesetzt.
Beispiel Quellcode.
Ausgabe als HTML Text der Methode getText vom JEditorPane:
<html>
<head>
</head>
<body>
<p align="left" style="margin-top: 0">
A
</p>
<p align="center" style="margin-top: 0">
B
</p>
<p align="right" style="margin-top: 0">
C
</p>
</body>
</html>
Mit der Schaltfläche "setText" wird ePane.setText(ePane.getText) aufgerufen, danach wird die Ausrichtung im HTML-Text nicht mehr korrekt gesetzt.
Beispiel Quellcode.
Java:
import java.awt.BorderLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Element;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledEditorKit;
public class EditorPaneAlignTest implements CaretListener {
JToggleButton tBtnAlignLeft = null, tBtnAlignCenter = null, tBtnAlignRight = null, tBtnAlignBlock = null;
JEditorPane ePane;
public static void main(String[] args) {
new EditorPaneAlignTest();
}
public EditorPaneAlignTest() {
JPanel pane = new JPanel(new BorderLayout(5, 5));
ePane = new JEditorPane("text/html", null);
ePane.addCaretListener(this);
JScrollPane sPane = new JScrollPane(ePane);
pane.add(sPane, BorderLayout.CENTER);
JToolBar toolBar = new JToolBar();
pane.add(toolBar, BorderLayout.NORTH);
ButtonGroup btnGroupAlign = new ButtonGroup();
tBtnAlignLeft = new JToggleButton();
tBtnAlignLeft.setToolTipText("Text linksbündig ausrichten");
tBtnAlignLeft.setAction(new StyledEditorKit.AlignmentAction("left", StyleConstants.ALIGN_LEFT));
tBtnAlignLeft.setFocusable(false);
toolBar.add(tBtnAlignLeft);
btnGroupAlign.add(tBtnAlignLeft);
tBtnAlignCenter = new JToggleButton();
tBtnAlignCenter.setToolTipText("Text linksbündig ausrichten");
tBtnAlignCenter.setAction(new StyledEditorKit.AlignmentAction("center", StyleConstants.ALIGN_CENTER));
tBtnAlignCenter.setFocusable(false);
toolBar.add(tBtnAlignCenter);
btnGroupAlign.add(tBtnAlignCenter);
tBtnAlignRight = new JToggleButton();
tBtnAlignRight.setToolTipText("Text linksbündig ausrichten");
tBtnAlignRight.setAction(new StyledEditorKit.AlignmentAction("right", StyleConstants.ALIGN_RIGHT));
tBtnAlignRight.setFocusable(false);
toolBar.add(tBtnAlignRight);
btnGroupAlign.add(tBtnAlignRight);
tBtnAlignBlock = new JToggleButton();
tBtnAlignBlock.setToolTipText("Textblock");
tBtnAlignBlock.setAction(new StyledEditorKit.AlignmentAction("block", StyleConstants.ALIGN_JUSTIFIED));
tBtnAlignBlock.setFocusable(false);
toolBar.add(tBtnAlignBlock);
btnGroupAlign.add(tBtnAlignBlock);
JButton btnPrintText = new JButton("print text to console");
btnPrintText.addActionListener(a -> System.out.println(ePane.getText()));
toolBar.add(btnPrintText);
JButton btnSetText = new JButton("setText");
btnSetText.addActionListener(a -> ePane.setText(ePane.getText()));
toolBar.add(btnSetText);
JFrame frame = new JFrame("Align-Test");
frame.setBounds(100, 100, 600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(pane);
frame.setVisible(true);
}
@Override
public void caretUpdate(CaretEvent e) {
DefaultStyledDocument styleDoc = (DefaultStyledDocument) ePane.getDocument();
Element element = styleDoc.getCharacterElement(ePane.getCaretPosition() - 1);
AttributeSet attribSet = element.getAttributes();
switch (StyleConstants.getAlignment(attribSet)) {
case StyleConstants.ALIGN_LEFT:
tBtnAlignLeft.setSelected(true);
break;
case StyleConstants.ALIGN_CENTER:
tBtnAlignCenter.setSelected(true);
break;
case StyleConstants.ALIGN_RIGHT:
tBtnAlignRight.setSelected(true);
break;
case StyleConstants.ALIGN_JUSTIFIED:
tBtnAlignBlock.setSelected(true);
break;
}
}
}