Hallo, ich habe zwei JTextPanes, deren Text ich manchmal zentriert, manchmal links- und manchmal rechtsbündig ausrichten will.
Das funktioniert teilweise, teils aber auch nicht und ich kann keine Logik darin erkennen. Zudem bin ich mir nicht ganz sicher, ob mein Code der effizienteste ist.
In der Hoffnung auf hilfreiche Kommentare poste ich hier mal mein Vorgehen. Ich habe kommentiert, was ich denke, dass die einzelnen Schritte bewirken:
[CODE lang="java" title="Konstruktor"] desc1 = new MyJTextPane();
desc1.setText("Test 1");
desc1.setOpaque(false);
desc2 = new MyJTextPane();
desc2.setText("Text 2");
desc2.setOpaque(false);
String font = desc1.getFont().getFamily();
int size = desc1.getFont().getSize();
// StyledDocuments der JTextPanes holen
doc1 = desc1.getStyledDocument();
doc2 = desc2.getStyledDocument();
// AttributSet mit rechtsbündiger Ausrichtung und der Standardfont und - größe erstellen
asRight = new SimpleAttributeSet();
asRight.addAttribute(StyleConstants.Alignment, StyleConstants.ALIGN_RIGHT);// alternativ: StyleConstants.setAlignment(asVertical, StyleConstants.ALIGN_RIGHT);
asRight.addAttribute(StyleConstants.FontFamily, font);
asRight.addAttribute(StyleConstants.Size, size);
// AttributSet mit linksbündiger Ausrichtung und der Standardfont und - größe erstellen
asLeft = new SimpleAttributeSet();
asLeft.addAttribute(StyleConstants.Alignment, StyleConstants.ALIGN_LEFT);
asLeft.addAttribute(StyleConstants.FontFamily, font);
asLeft.addAttribute(StyleConstants.Size, size);
// AttributSet mit zentrierter Ausrichtung und der Standardfont und - größe erstellen
asCentered = new SimpleAttributeSet();
asCentered.addAttribute(StyleConstants.Alignment, StyleConstants.ALIGN_CENTER);
asCentered.addAttribute(StyleConstants.FontFamily, font);
asCentered.addAttribute(StyleConstants.Size, size);
// Neuen Style mit dem zentriertem AttributSet erstellen und dem StyledDocument hinzufügen
styleCentered = doc1.addStyle("styleCentered", null);
doc2.addStyle("styleCentered", null);
styleCentered.addAttributes(asCentered);
// Analog für das linksbündige AttributSet
styleLeft = doc1.addStyle("styleLeft", null);
doc2.addStyle("styleLeft", null);
styleLeft.addAttributes(asLeft);
// Analog für das rechtsbündige AttributSet
styleRight = doc1.addStyle("styleRight", null);
doc2.addStyle("styleRight", null);
styleRight.addAttributes(asRight);[/CODE]
[CODE lang="java" title="Methode"] if (relCenterPoint.getOrientation() == 'h') {
desc1.setBounds(relCenterPoint.x - prefSize1.width / 2, relCenterPoint.y - prefSize1.height - 2, prefSize1.width, prefSize1.height);
desc2.setBounds(relCenterPoint.x - prefSize2.width / 2, relCenterPoint.y + 2, prefSize2.width, prefSize2.height);
doc1.setCharacterAttributes(0, doc1.getLength() - 1, asCentered, false);
doc2.setCharacterAttributes(0, doc2.getLength() - 1, asCentered, false);
// doc1.setCharacterAttributes(0, doc1.getLength() - 1, styleCentered, false);
// doc2.setCharacterAttributes(0, doc2.getLength() - 1, styleCentered, false);
// doc1.setLogicalStyle(0, styleCentered);
// doc2.setLogicalStyle(0, styleCentered);[/CODE]
In der Methode habe ich auch die auskommentierten Varianten probiert, funktioniert aber alles nicht
Das funktioniert teilweise, teils aber auch nicht und ich kann keine Logik darin erkennen. Zudem bin ich mir nicht ganz sicher, ob mein Code der effizienteste ist.
In der Hoffnung auf hilfreiche Kommentare poste ich hier mal mein Vorgehen. Ich habe kommentiert, was ich denke, dass die einzelnen Schritte bewirken:
[CODE lang="java" title="Konstruktor"] desc1 = new MyJTextPane();
desc1.setText("Test 1");
desc1.setOpaque(false);
desc2 = new MyJTextPane();
desc2.setText("Text 2");
desc2.setOpaque(false);
String font = desc1.getFont().getFamily();
int size = desc1.getFont().getSize();
// StyledDocuments der JTextPanes holen
doc1 = desc1.getStyledDocument();
doc2 = desc2.getStyledDocument();
// AttributSet mit rechtsbündiger Ausrichtung und der Standardfont und - größe erstellen
asRight = new SimpleAttributeSet();
asRight.addAttribute(StyleConstants.Alignment, StyleConstants.ALIGN_RIGHT);// alternativ: StyleConstants.setAlignment(asVertical, StyleConstants.ALIGN_RIGHT);
asRight.addAttribute(StyleConstants.FontFamily, font);
asRight.addAttribute(StyleConstants.Size, size);
// AttributSet mit linksbündiger Ausrichtung und der Standardfont und - größe erstellen
asLeft = new SimpleAttributeSet();
asLeft.addAttribute(StyleConstants.Alignment, StyleConstants.ALIGN_LEFT);
asLeft.addAttribute(StyleConstants.FontFamily, font);
asLeft.addAttribute(StyleConstants.Size, size);
// AttributSet mit zentrierter Ausrichtung und der Standardfont und - größe erstellen
asCentered = new SimpleAttributeSet();
asCentered.addAttribute(StyleConstants.Alignment, StyleConstants.ALIGN_CENTER);
asCentered.addAttribute(StyleConstants.FontFamily, font);
asCentered.addAttribute(StyleConstants.Size, size);
// Neuen Style mit dem zentriertem AttributSet erstellen und dem StyledDocument hinzufügen
styleCentered = doc1.addStyle("styleCentered", null);
doc2.addStyle("styleCentered", null);
styleCentered.addAttributes(asCentered);
// Analog für das linksbündige AttributSet
styleLeft = doc1.addStyle("styleLeft", null);
doc2.addStyle("styleLeft", null);
styleLeft.addAttributes(asLeft);
// Analog für das rechtsbündige AttributSet
styleRight = doc1.addStyle("styleRight", null);
doc2.addStyle("styleRight", null);
styleRight.addAttributes(asRight);[/CODE]
[CODE lang="java" title="Methode"] if (relCenterPoint.getOrientation() == 'h') {
desc1.setBounds(relCenterPoint.x - prefSize1.width / 2, relCenterPoint.y - prefSize1.height - 2, prefSize1.width, prefSize1.height);
desc2.setBounds(relCenterPoint.x - prefSize2.width / 2, relCenterPoint.y + 2, prefSize2.width, prefSize2.height);
doc1.setCharacterAttributes(0, doc1.getLength() - 1, asCentered, false);
doc2.setCharacterAttributes(0, doc2.getLength() - 1, asCentered, false);
// doc1.setCharacterAttributes(0, doc1.getLength() - 1, styleCentered, false);
// doc2.setCharacterAttributes(0, doc2.getLength() - 1, styleCentered, false);
// doc1.setLogicalStyle(0, styleCentered);
// doc2.setLogicalStyle(0, styleCentered);[/CODE]
In der Methode habe ich auch die auskommentierten Varianten probiert, funktioniert aber alles nicht