JScrollPane in JTextArea benutzen

REC

Bekanntes Mitglied
Ich habe eine JTextArea ,da ich nicht weiss wie lange die Ausgabe sein wird,würde ich gerne Scrollbalken horizontal und vertikal einbauen.

Ich habe im Web eigentlich ein gutes Beispiel gefunden.
Aber wenn ich es so mache,wird das Fenster entweder "weiss" oder der Text hat rundherum einen grauen Balken.

Wo liegt der Fehler?

Java:
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;

/**
 * Dieses einfache Ausgabe Fenster gibt zeigt alle Karten an welche sich in den
 * 5 verschiedenen Karteien befinden
 * 
 * @author 
 * @version 18.8.2010
 * 
 */
public class AusgabeFenster extends JFrame{


	private JFrame mainFrame;
	private JPanel mainPanel;
    private JScrollPane x;
    private JScrollPane y;
	
	private JTextArea textFeld;

	public AusgabeFenster() {

		mainFrame = new JFrame("Listen Ausgabe");
		mainPanel = new JPanel();
		textFeld = new JTextArea();
	
		x = new JScrollPane(textFeld);
		
		
		paint();
	}

	/**
	 * Zeichnet das Fenster,da ich jetz noch nicht genau weiss wie dieses
	 * aussieht muss ich das hier später noch beschreiben
	 */
	public void paint() {

		// Main Frame Einstellungen
		mainFrame.setLayout(new FlowLayout());
		mainFrame.setResizable(false);
		mainFrame.setSize(400, 800);
		mainFrame.setLocationRelativeTo(null);
		mainFrame.getContentPane().setBackground(Color.white);

		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		

		// textFeld Einstellungen
		textFeld.setBackground(Color.white);
		textFeld.setEditable(false);
		
		//Zusammen setzten der Elemente
		
		mainPanel.add(textFeld);
		mainFrame.add(mainPanel);
		
		mainFrame.setVisible(true);
		
		//setContentPane(mainPanel);
		
		
	}

	public void karteAusgeben(Karte karte, int index) {

		textFeld.append("Position " + index + ":  " + karte.getWort1() + " = " + karte.getWort2() + "\n");

	}
	
	public void karteinummer(int kartei){
		textFeld.append("\n");
		textFeld.append("Kartei " + kartei +" " + "\n" + "\n");
	}

}
 
Hey danke, ich kann jetzt mal scrollen.

Aber irgendwie macht das Fenster nach jedem Neustart komische Sachen.
Manchmal sehe 2 Scrollbars also vertikal und horizontal und machmal sehe ich gar nichts?Ich habe 100 Zeile ausgabe aber ich kann nur bis Zeile 27 runterscrollen?

Habe nun mal das Layout auf Border gewechslet ,nun kann ich alles schön scrollen aber das Fenster ist ziemlich klein,wie kann ich das wieder auf die gleiche Grösse mache wie das JFrame?


Mann ich habe nach wie vor komische Fehler???:L
Jedesmal wenn ich es ausführe wird das Fenster anders?
 
Zuletzt bearbeitet:
Vielleicht kannst du mit den Methoden
Code:
setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS)
und
Code:
setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS)
dafür sorgen, dass du auf jeden Fall immer eine ScrollBar siehst.
 
Ok versuche ich das mal.Aber diese Fehler die entstehen sind sehr komisch.
Manchmal kann ich sind beide Scrollbars da,manchmal keiner.

Ich im Internet was gelesen von EDT? Aber ich habe NULL ahnung was das sein soll.


Also das bringt auch nichts🙁
Mann ich müsste nur noch das hinbekommen, das ich scrollen kann,dann könnte ich in meinem Projekt weitermachen.
 
Zuletzt bearbeitet:
Guten Morgen,

Ich würde mir wirklich wünschen das ich was unterschlagen hätte,und irgendwo eine fetter Fehler liegen würde,aber leider habe ich alles gepostet.

Aber ich setzte hier mal beide Klassen rein.DIe Klasse "AusgabeFenster" und die Klasse "Datenbank",jene die AusgabeFenster benutzt.

Gibt es denn keine Möglichkeit dieses Fenster ganz anders zu machen? Es geht ja grundsätzlich darum,das wenn jemand 100 Wörter hät das dieses alle angezeigt werden können.

Klasse Datenbank

Java:
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JOptionPane;



public class Datenbank {


	private ArrayList<Karte> kartei1;
	private ArrayList<Karte> kartei2;
	private ArrayList<Karte> kartei3;
	private ArrayList<Karte> kartei4;
	private ArrayList<Karte> kartei5;
	private ArrayList[] alleKarteien;
        
private Karte aktuelleKarte;

    
	//private Fenster gui;

	public Datenbank() {

		kartei1 = new ArrayList<Karte>();
		kartei2 = new ArrayList<Karte>();
		kartei3 = new ArrayList<Karte>();
		kartei4 = new ArrayList<Karte>();
		kartei5 = new ArrayList<Karte>();
		alleKarteien = new ArrayList[5];
		
                alleKarteien[0] = kartei1;
		alleKarteien[1] = kartei2;
		alleKarteien[2] = kartei3;
		alleKarteien[3] = kartei4;
		alleKarteien[4] = kartei5;
		
		
		for(int i = 0;i < 100;i++){
			kartei4.add(new Karte("Was","geht"));
		}
		

		
	}

	/**
	 * Gibt alle 5 Karteien mit deren Karten aus und beschriftet diese seperat
	 * in einen anderen Fenster aus.
	 * 
	 * Die Methode funktionert so,das sie eine Liste durchgeht in der die
	 * Karteien gespeichert sind.Die einzelne Kartei wird dann herausgenommen
	 * und wieder durchgenommen,und die Karte an die Klasse "AusgabeFenster"
	 * geschickt
	 */

	public void listeAusgeben() {

		AusgabeFenster ausgabe = new AusgabeFenster();

		int karteizähler = 1;

		for (ArrayList<Karte> element : alleKarteien) {
			ArrayList<Karte> aktuelleKartei = element;

			int index = 0;
			while (index < aktuelleKartei.size()) {

				ausgabe.karteinummer(karteizähler);

				Iterator<Karte> it = aktuelleKartei.iterator();
				while (it.hasNext()) {
					Karte temp = it.next();
					aktuelleKarte = temp;
					ausgabe.karteAusgeben(temp, index);
					index++;
				}

			}
			karteizähler++;
		}
	}

	// Diese Methode dient dazu die aktuelle Karte zu verwenden
	public Karte getAktuelleKarte() {
		return kartei1.get(0);
	}

	// Löscht eine Karte aus einem gewählten Array
	public void karteLöschen(int array, int position) {

		if (array == 1) {
			if (position < 0 || position >= kartei1.size()) {
				JOptionPane.showMessageDialog(null,
						"Diese Position ist ungültig!");
			} else {
				kartei1.remove(position);
			}
		} else if (array == 2) {
			if (position < 0 || position >= kartei2.size()) {
				JOptionPane.showMessageDialog(null,
						"Diese Position ist ungültig!");
			} else {
				kartei2.remove(position);
			}

		} else if (array == 3) {
			if (position < 0 || position >= kartei3.size()) {
				JOptionPane.showMessageDialog(null,
						"Diese Position ist ungültig!");
			} else {
				kartei3.remove(position);
			}
		} else if (array == 4) {
			if (position < 0 || position >= kartei4.size()) {
				JOptionPane.showMessageDialog(null,
						"Diese Position ist ungültig!");
			} else {
				kartei4.remove(position);
			}
		} else if (array == 5) {
			if (position < 0 || position >= kartei5.size()) {
				JOptionPane.showMessageDialog(null,
						"Diese Position ist ungültig!");
			} else {
				kartei5.remove(position);
			}
		} else {
			JOptionPane.showMessageDialog(null,
					"Es gibt nur Karteien von 1 bis 5");

		}
	}
}


Klasse AusgabeFenster

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

/**
 * Dieses einfache Ausgabe Fenster gibt zeigt alle Karten an welche sich in den
 * 5 verschiedenen Karteien befinden
 * 
 * @author 
 * @version 18.8.2010
 * 
 */
public class AusgabeFenster {


	private JFrame mainFrame;
	private JPanel mainPanel;
    private JScrollPane x;
    //private JScrollPane y;
	
	private JTextArea textFeld;

	public AusgabeFenster() {

		mainFrame = new JFrame("Listen Ausgabe");
		mainPanel = new JPanel();
		textFeld = new JTextArea();
		//textFeld.setPreferredSize(new Dimension(800, -1));
	
		x = new JScrollPane(textFeld);
		
		
		
		paint();
	}

	/**
	 * Zeichnet das Fenster,da ich jetz noch nicht genau weiss wie dieses
	 * aussieht muss ich das hier später noch beschreiben
	 */
	public void paint() {

		// Main Frame Einstellungen
		mainFrame.setLayout(new BorderLayout());
		mainFrame.setResizable(false);
		mainFrame.setSize(400, 800);
		mainFrame.setLocationRelativeTo(null);
		mainFrame.getContentPane().setBackground(Color.white);

		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		

		// textFeld Einstellungen
		textFeld.setBackground(Color.white);
		textFeld.setEditable(false);
		
		//Zusammen setzten der Elemente
		
		mainPanel.add(x);
		mainFrame.add(mainPanel,BorderLayout.CENTER);
		
		mainFrame.setVisible(true);
	
		
		//setContentPane(mainPanel);
		
		
	}

	public void karteAusgeben(Karte karte, int index) {

		textFeld.append("Position " + index + ":  " + karte.getWort1() + " = " + karte.getWort2() + "\n");

	}
	
	public void karteinummer(int kartei){
		textFeld.append("\n");
		textFeld.append("Kartei " + kartei +" " + "\n" + "\n");
	}

}

So ich hoffe das jemand mein Fehler findet???:L
 
Also du meinst ich brauche keine mainPanel?
Ok ich werde das mal so versuchen.
Ich dachte eben man sollte eben nie etwas direkt auf das mainFrame draufmachen.
 
Du kannst Da auch ein Panel zwischenschalten, aber dem solltest Du dann ein passendes Layout verpassen. Standardmässig hat das - glaube ich - ein FlowLayout, was in dem Fall eventuell nicht so geeignet ist.
 

Neue Themen


Zurück
Oben