Anzeige:
Ergebnis 1 bis 4 von 4

Thema: HTML formatierter TEXT hat keine Scrollbalken und keinen Zeilenumbruch

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.04.2006
    Beiträge
    29

    HTML formatierter TEXT hat keine Scrollbalken und keinen Zeilenumbruch

    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:
    Code:
    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&uuml;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);
    	}
    
    }
    Geändert von tomcom (10-11-2007 um 17:14 Uhr) Grund: Fehlerhafte Darstellung des Quellcodebeispiels

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Aus der Java-API-Doku:

    JScrollPane

    public JScrollPane(Component view,
    int vsbPolicy,
    int hsbPolicy)

    Creates a JScrollPane that displays the view component in a viewport whose view position can be controlled with a pair of scrollbars. The scrollbar policies specify when the scrollbars are displayed, For example, if vsbPolicy is VERTICAL_SCROLLBAR_AS_NEEDED then the vertical scrollbar only appears if the view doesn't fit vertically. The available policy settings are listed at setVerticalScrollBarPolicy(int) and setHorizontalScrollBarPolicy(int).

    Parameters:
    view - the component to display in the scrollpanes viewport
    vsbPolicy - an integer that specifies the vertical scrollbar policy
    hsbPolicy - an integer that specifies the horizontal scrollbar policy
    See Also:
    setViewportView(java.awt.Component)
    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    04.04.2006
    Beiträge
    29
    Daran liegt das Problem nicht. Aber es hat mich immerhin auf den richtigen weg gebracht. Die Lösung war, für das Panel ein Gridlayout (1,1) zu setzen.
    Was jetzt noch fehlt, ist der automatische Zeilenumbruch.

    Änderung der Main-Methode:
    Code:
    	public static void main(String[] args) {
    		JFrame jf = new JFrame("HTML");
    		JScrollPane jscp = new JScrollPane(new HtmlV());
    		JPanel jp = new JPanel();
    		jp.setLayout(new GridLayout(1,1));
    		jp.add(jscp);
    		jf.add(jp);
    		jf.setSize(600,400);
    		jf.setVisible(true);
    	}

  4. #4
    Registrierter Benutzer
    Registriert seit
    04.04.2006
    Beiträge
    29

    Lösung gefunden

    Ich hab die Lösung durch viel rumprobieren gefunden.

    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:
    Code:
    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 "<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&uuml;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>NOCH VIEL MEHR TEXT .................................</li> " +
    		"</ul>"+
    		"</font>";
    	}
    }

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •