Java JScrollPane

tobi.wld

Lt. Junior Grade
Registriert
Dez. 2020
Beiträge
268
Hallo zusammen,

ich bin gerade darüber mir ein Spiel zu programmieren.
Nun bin ich soweit dass ich das Hilfe-Fenster programmieren. Nun habe ich aber das Problem, dass mir (obwohl ich eigentlich JScrollPane benutze) die Scrollbar nicht angezeigt wird, und sich das Fenster logischerweise auch nicht scrollen lässt.

Hat jemand eine Idee was ich falsch mache bzw wie ich das "Problem" lösen kann?
Mein Code füge ich unten mit ein.

Java:
import java.awt.Color;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;

public class MyFrame extends JFrame {
    MyFrame() {
        ImageIcon image = new ImageIcon("icon.png");
        JScrollPane scrollPane = new JScrollPane();
        
        this.setTitle("Battleships - Hilfe");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(700, 550);
        this.setIconImage(image.getImage());
        this.setResizable(true);
        
        JTextPane textPane = new JTextPane();
        textPane.setFont(new Font("Tahomma", Font.PLAIN, 15));
        textPane.setEditable(false); // Text kann nicht vom User verändert werden
        textPane.setBackground(Color.WHITE); // Hintergrundfarbe Weiß
        textPane.setText("\nBattleships - Hilfe:\n\n" // Passenden Text im Textfeld einfügen
                + "1. Schiffe setzen:\n\n   " + "Jeder Spieler hat eine bestimmte Anzahl an Schiffen:\n      "
                + "- 4 Schiffe über 2 Kästchen\n      " + "- 3 Schiffe über 3 Kästchen\n      "
                + "- 2 Schiffe über 4 Kästchen\n      " + "- 1 Schiff über 5 Kästchen\n\n   "
                + "Setzen Sie Ihre Schiffe mithilfe eines Klicks auf das gewünschte Feld.\n      "
                + "- Wenn Sie mit der linken Maustaste klicken, richten Sie Ihr Schiff horizontal aus.\n      "
                + "- Wenn Sie mit der rechten Maustaste auf ein Feld klicken, wird Ihr Schiff vertikal ausgerichtet.\n\n   "
                + "Die Schiffe werden in der Reihenfolge von groß zu klein gesetzt.\n\n" + "2. Spielablauf:\n\n   "
                + "Ende\n"
                + "   Hallo\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHallo");
        
        scrollPane.add(textPane);
        
        this.add(scrollPane);
        this.add(textPane);
        this.setVisible(true);
    }
}

Vielen Dank schon einmal im Voraus!
 
Du fügst die Textpane sowohl in die Scrollpane (34) als in das JFrame (37) ein - das ergibt nicht viel Sinn.
Evtl reicht das schon, die Zeile 37 wegzulassen.
Ich weiß auch nicht, ob du einen Layout-Manager verwenden solltest.
 
  • Gefällt mir
Reaktionen: tobi.wld
Hm, okay.
tollertyp schrieb:
Ich weiß auch nicht, ob du einen Layout-Manager verwenden solltest.
Zwecks Layout-Manager habe ich bereits recherchiert. Allerdings soll in das Fenster wirklich nur Text. Dann bräuchte ich ja theoretisch keinen Layout-Manager oder?
 
Btw, die Schrift heißt glaube eher Tahoma.

Und kann sein, dass es ohne Layout-Manager wunderbar funktioniert.
 
  • Gefällt mir
Reaktionen: tobi.wld
Also das mit der Schrift stimmt, ist mir garnicht aufgefallen. Aber das Problem mit der Scrollbar besteht leider immer noch :/

Habe es auch schonmal probiert wenn ich die Scrollbar nach dem Textfeld einfüge, aber dann überschreibt Sie das Textfeld
 
Wie ist denn dein aktueller Code-Stand? Es reicht der Konstruktor von MyFrame.

Nochmals zur Erklärung:
Code:
this.add(textPane);
Diese Zeile entfernt textPane aus der scrollPane und fügt es MyFrame hinzu. Deshalb kann es keine Scrollbars darum geben, wenn du diese Zeile drin hast.
 
tollertyp schrieb:
Wie ist denn dein aktueller Code-Stand? Es reicht der Konstruktor von MyFrame.

Java:
MyFrame() {
        ImageIcon image = new ImageIcon("icon.png");
        JScrollPane scrollPane = new JScrollPane();
        
        this.setTitle("Battleships - Hilfe");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(700, 550);
        this.setIconImage(image.getImage()); 
        this.setResizable(true);
        
        JTextPane textPane = new JTextPane();
        textPane.setFont(new Font("Tahoma", Font.PLAIN, 15));
        textPane.setEditable(false); // Text kann nicht vom User verändert werden
        textPane.setBackground(Color.WHITE); // Hintergrundfarbe Weiß
        textPane.setText("\nBattleships - Hilfe:\n\n" // Passenden Text im Textfeld einfügen
                + "1. Schiffe setzen:\n\n   " + "Jeder Spieler hat eine bestimmte Anzahl an Schiffen:\n      "
                + "- 4 Schiffe über 2 Kästchen\n      " + "- 3 Schiffe über 3 Kästchen\n      "
                + "- 2 Schiffe über 4 Kästchen\n      " + "- 1 Schiff über 5 Kästchen\n\n   "
                + "Setzen Sie Ihre Schiffe mithilfe eines Klicks auf das gewünschte Feld.\n      "
                + "- Wenn Sie mit der linken Maustaste klicken, richten Sie Ihr Schiff horizontal aus.\n      "
                + "- Wenn Sie mit der rechten Maustaste auf ein Feld klicken, wird Ihr Schiff vertikal ausgerichtet.\n\n   "
                + "Die Schiffe werden in der Reihenfolge von groß zu klein gesetzt.\n\n" + "2. Spielablauf:\n\n   "
                + "Ende\n"
                + "   Hallo\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHallo");
        
        scrollPane.add(textPane);
        this.add(scrollPane);
        this.setVisible(true);
    }
}
 
Das geht noch nicht, oder?

Würde mal statt
Code:
JScrollPane scrollPane = new JScrollPane();

das hier machen in Zeile 26:
Code:
JScrollPane scrollPane = new JScrollPane(textPane);
this.add(scrollPane);

Und leider (um ehrlich zu sein: Zum Glück) liegt bei mir Swing und die ScrollPane (eher Scroll-Pain) lange zurück.
 
  • Gefällt mir
Reaktionen: tobi.wld
tollertyp schrieb:
Das geht noch nicht, oder?

Würde mal statt
Code:
JScrollPane scrollPane = new JScrollPane();

das hier machen in Zeile 26:
Code:
JScrollPane scrollPane = new JScrollPane(textPane);
this.add(scrollPane);

Und leider (um ehrlich zu sein: Zum Glück) liegt bei mir Swing und die ScrollPane (eher Scroll-Pain) lange zurück.

Perfekt, vielen Dank. Es funktioniert!
 
  • Gefällt mir
Reaktionen: tollertyp
Zurück
Oben