Java HTMLText hat keine Scrollbalken undZeilenumbr

Ich möchte gerne mit Java und Swing einen formatierten Text ausgeben.
Mir schien die Benutzung von HTML am sinnvollsten.

Mein Programm zeigt den Text an, aber man kann nicht scrollen.
Außerdem gibt es keinen automatischen Zeilenumbruch. Wie kann ich
diesen aktivieren.

Damit ich nicht mein ganzes Programm mitschiken muß, habe ich ein
Miniprogramm geschrieben, um den Fehler zu rekostruieren.

Könntet ihr mal einen Blick darauf werfen und mir sagen, was falsch
ist.

Vielen Dank im Voraus,
Thomas

QUELLTEXT:

import javax.swing.\*;
import javax.swing.text.html.HTMLEditorKit;


public class HtmlV extends JPanel {
 private static final long serialVersionUID = -5049101295205508494L;

 public HtmlV() {
 JEditorPane editPane = new JEditorPane();
 editPane.setEditable(false);
 HTMLEditorKit htmlkit = new HTMLEditorKit();
 editPane.setEditorKit(htmlkit);
 editPane.setAutoscrolls(true);
 editPane.setText( //TODO: Scroll able machen
 " Spielregeln "+
 "" +
 "

" +
"- Es wird auf einem Brett mit 8x8 Feldern gespielt.
" +
"- Als Startaufstellung werden vor dem Spielbeginn zwei weiße
und zwei schwarze Steine auf die mittleren Felder " +
"des Bretts gelegt, je zwei diagonal gegenüberliegende mit der
gleichen Farbe.
" +
"- Schwarz (Spieler 1) führt den ersten Zug aus.
" +
"- Die Spieler ziehen abwechselnd. " +
„Man setzt entweder einen Stein mit der eigenen Farbe nach oben
auf ein leeres Feld, oder man passt.“ +
"Passen ist aber nur erlaubt, wenn man keine legale Möglichkeit
hat, einen Stein zu setzen.
" +
"- Man darf nur so setzen, dass ausgehend von dem gesetzten
Stein in beliebiger Richtung " +
"(senkrecht, waagerecht oder diagonal) ein oder mehrere
gegnerische Steine anschließen und " +
"danach wieder ein eigener Stein liegt. Es muss also mindestens
ein gegnerischer Stein von dem gesetzten Stein " +
„und einem anderen eigenen Stein in gerader Linie eingeschlossen
werden.“ +
"Dabei müssen alle Felder zwischen den beiden eigenen Steinen von
gegnerischen Steinen besetzt sein.
" +
„- Alle gegnerischen Steine, die so eingeschlossen werden,
wechseln die Farbe,“ +
„indem sie umgedreht werden. Dies geschieht als Teil desselben
Zuges, bevor der Gegner zum Zug kommt.“ +
„Ein Zug kann mehrere Reihen gegnerischer Steine gleichzeitig
einschließen, die dann alle umgedreht werden“ +
" Wenn aber ein gerade umgedrehter Stein weitere gegnerische
Steine einschließt, werden diese nicht umgedreht.
" +
"- Betrifft nur die Variante Reversi: wenn der Spieler
A, der am Zug ist, seinen Steinvorrat aufgebraucht hat, aber noch
Steine einschließen kann, der Gegner B aber in seinem nächsten Zug
keine Steine einschließen kann, falls A passt, aber noch Steine in
seinem Vorrat hat, dann erhält A für seinen Zug einen Stein von
B.
" +
"- Wenn die Spieler unmittelbar nacheinander passen, wenn also
keiner mehr einen Stein setzen kann, ist das Spiel beendet.
" +
"- Der Spieler, der am Ende die meisten Steine seiner Farbe auf
dem Brett hat, gewinnt. Haben beide die gleiche Zahl, ist das Spiel
unentschieden.
" +
"- Um die Höhe des Gewinns zu ermitteln, gibt es verschiedene
Regelungen. Meist werden die Felder, die bei Spielende noch leer
sind, dem Gewinner gutgeschrieben, also zu der Differenz der
Steine-Anzahl addiert.
" +
"- Mit einer Zusatzregel, die oft in Japanischen Turnieren
angewandt wird, kann man ein Unentschieden vermeiden: ein Spieler
(der z. B. ausgelost wird) legt fest, ob eine gleiche
Steine-Anzahl am Partieende als Sieg für Weiß oder für Schwarz
gewertet wird. Der andere Spieler wählt dann eine Farbe.
" +
„“+
„“
);
add(new JScrollPane(editPane));

}

public static void main(String[] args) {
JFrame jf = new JFrame(„HTML“);
jf.add(new HtmlV());
jf.setSize(600,400);
jf.setVisible(true);
}

}

Hallo!

Versuch mal:

 public HtmlV() {
**super(new BorderLayout());**
 JEditorPane editPane = new JEditorPane();

JPanel hat keinen Default-Layout-Manager.

HTH
th

Scrollproblem gelöst, aber kein Zeilenumbruch
Danke, es geht. Aber mein Text geht unheimlich in die Breite. Ich möchte aber eine feste Breite haben.
Also einen automatischen Zeilenumbruch.

Das ganze funktioniert nur, wenn ich kein HTMLEditiorKit setze.

Hat da irgendjemand eine Idee?

Hallo!

Danke, es geht. Aber mein Text geht unheimlich in die Breite.

Was heißt ‚unheimlich in die Breite‘? Der Text wird so breit, wie Du das Fenster aufziehst, bricht also am rechten Rand automatisch um. Wenn ich Dein Beispiel mit meiner Ergänzung starte, sehe ich die ersten etwa 2/3 des Textvolumens und muss runterscrollen, um den Rest zu sehen. Bei Dir nicht?

Ich möchte aber eine feste Breite haben.
Also einen automatischen Zeilenumbruch.

Irgendwie widerspricht sich das. Wenn Du eine feste Breite haben willst, dann brauchst Du harte und keine automatischen Umbrüche. Oder Du packst den Text in eine Tabelle, die in der Breite beschränkt ist.

th

Zeilenumbruch geht jetzt auch
Also für alle, die ähnliche Probleme haben, poste ich hier nocheinmal meinen Quelltext.
Wichtig ist, daß das JPanel , auf dem das JEditorPane liegt ein Layout wie z.b GridLayout(1,1) hat. Das JEditorPane wird zunächst nochmal auf ein JScrollPane gelegt. Dieses JScrollPane kommt dann auf das JPanel.

QUELLTEXT:

import java.awt.\*;
import javax.swing.\*;
import javax.swing.text.html.\*;


public class HtmlV extends JPanel {
 private static final long serialVersionUID = -5049101295205508494L;

 public HtmlV() {
 JEditorPane editPane = new JEditorPane();
 editPane.setEditable(false);
 editPane.setEditorKit(new HTMLEditorKit());
 editPane.setAutoscrolls(true);
 editPane.setText(getLongHtmlText());
 setLayout(new GridLayout(1,1));
 add(new JScrollPane(editPane));
 }

 public static void main(String[] args) {
 JFrame jf = new JFrame("HTML");
 jf.add(new HtmlV());
 jf.setSize(600,400);
 jf.setVisible(true);
 }


 static private String getLongHtmlText() {
 return " Spielregeln "+
 "" +
 "

" +
"- Es wird auf einem Brett mit 8x8 Feldern gespielt.
" +
"- Als Startaufstellung werden vor dem Spielbeginn zwei weiße und zwei schwarze Steine auf die mittleren Felder " +
"des Bretts gelegt, je zwei diagonal gegenüberliegende mit der gleichen Farbe.
" +
"- Viel mehr TEXT …
" +
„“+
„“;
}
}

Wichtig ist, daß das JPanel , auf dem das
JEditorPane liegt ein Layout wie z.b
GridLayout(1,1) hat. Das JEditorPane wird
zunächst nochmal auf ein JScrollPane gelegt. Dieses
JScrollPane kommt dann auf das JPanel.

Genau. Oder eben setLayout(new BorderLayout()); bzw. super(new BorderLayout());. Zumindest im endgültigen Quellcode sähe ein nur einzelliges Grid irgendwie seltsam und nach Hack aus.

Was heißt ‚unheimlich in die Breite‘? Der Text wird so breit,
wie Du das Fenster aufziehst, bricht also am rechten Rand
automatisch um. Wenn ich Dein Beispiel mit meiner Ergänzung
starte, sehe ich die ersten etwa 2/3 des Textvolumens und muss
runterscrollen, um den Rest zu sehen. Bei Dir nicht?

Genau das ist bei mir nicht so. Ich musste seitlich scrollen. Aber mit ein bisschen umschichten ging es.
Das Phänonehm trat nur beim HTMLEditorKit auf.
Beim DeafaultEditorKit ging es ganz normal. Aber mittlerweile hab ich es ja hinbekommen.