tomcom
10-11-2007, 17:11
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
"<html><body><h2><font face=\"sans-serif\">Spielregeln</font></h2>"+
"<font face=\"sans-serif\">" +
"<ul>" +
"<li>Es wird auf einem Brett mit 8x8 Feldern gespielt.</li>" +
"<li>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.</li>" +
"<li>Schwarz (Spieler 1) führt den ersten Zug aus.</li>" +
"<li>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.</li>" +
"<li>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.</li>" +
"<li>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.</li>" +
"<li>Betrifft nur die Variante <i>Reversi</i>: 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.</li>" +
"<li>Wenn die Spieler unmittelbar nacheinander passen, wenn also keiner mehr einen Stein setzen kann, ist das Spiel beendet.</li>" +
"<li>Der Spieler, der am Ende die meisten Steine seiner Farbe auf dem Brett hat, gewinnt. Haben beide die gleiche Zahl, ist das Spiel unentschieden.</li>" +
"<li>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.</li>" +
"<li>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.</li>" +
"</ul>"+
"</font></body></html>"
);
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);
}
}
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
"<html><body><h2><font face=\"sans-serif\">Spielregeln</font></h2>"+
"<font face=\"sans-serif\">" +
"<ul>" +
"<li>Es wird auf einem Brett mit 8x8 Feldern gespielt.</li>" +
"<li>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.</li>" +
"<li>Schwarz (Spieler 1) führt den ersten Zug aus.</li>" +
"<li>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.</li>" +
"<li>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.</li>" +
"<li>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.</li>" +
"<li>Betrifft nur die Variante <i>Reversi</i>: 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.</li>" +
"<li>Wenn die Spieler unmittelbar nacheinander passen, wenn also keiner mehr einen Stein setzen kann, ist das Spiel beendet.</li>" +
"<li>Der Spieler, der am Ende die meisten Steine seiner Farbe auf dem Brett hat, gewinnt. Haben beide die gleiche Zahl, ist das Spiel unentschieden.</li>" +
"<li>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.</li>" +
"<li>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.</li>" +
"</ul>"+
"</font></body></html>"
);
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);
}
}