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:
importjava.awt.Color;importjava.awt.FlowLayout;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextArea;importjavax.swing.JScrollPane;/**
* Dieses einfache Ausgabe Fenster gibt zeigt alle Karten an welche sich in den
* 5 verschiedenen Karteien befinden
*
* @author
* @version 18.8.2010
*
*/publicclassAusgabeFensterextendsJFrame{privateJFrame mainFrame;privateJPanel mainPanel;privateJScrollPane x;privateJScrollPane y;privateJTextArea textFeld;publicAusgabeFenster(){
mainFrame =newJFrame("Listen Ausgabe");
mainPanel =newJPanel();
textFeld =newJTextArea();
x =newJScrollPane(textFeld);paint();}/**
* Zeichnet das Fenster,da ich jetz noch nicht genau weiss wie dieses
* aussieht muss ich das hier später noch beschreiben
*/publicvoidpaint(){// Main Frame Einstellungen
mainFrame.setLayout(newFlowLayout());
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);}publicvoidkarteAusgeben(Karte karte,int index){
textFeld.append("Position "+ index +": "+ karte.getWort1()+" = "+ karte.getWort2()+"\n");}publicvoidkarteinummer(int kartei){
textFeld.append("\n");
textFeld.append("Kartei "+ kartei +" "+"\n"+"\n");}}
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?
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:
importjava.util.ArrayList;importjava.util.Iterator;importjavax.swing.JOptionPane;publicclassDatenbank{privateArrayList<Karte> kartei1;privateArrayList<Karte> kartei2;privateArrayList<Karte> kartei3;privateArrayList<Karte> kartei4;privateArrayList<Karte> kartei5;privateArrayList[] alleKarteien;privateKarte aktuelleKarte;//private Fenster gui;publicDatenbank(){
kartei1 =newArrayList<Karte>();
kartei2 =newArrayList<Karte>();
kartei3 =newArrayList<Karte>();
kartei4 =newArrayList<Karte>();
kartei5 =newArrayList<Karte>();
alleKarteien =newArrayList[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(newKarte("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
*/publicvoidlisteAusgeben(){AusgabeFenster ausgabe =newAusgabeFenster();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 verwendenpublicKartegetAktuelleKarte(){return kartei1.get(0);}// Löscht eine Karte aus einem gewählten Arraypublicvoid 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);}}elseif(array ==2){if(position <0|| position >= kartei2.size()){JOptionPane.showMessageDialog(null,"Diese Position ist ungültig!");}else{
kartei2.remove(position);}}elseif(array ==3){if(position <0|| position >= kartei3.size()){JOptionPane.showMessageDialog(null,"Diese Position ist ungültig!");}else{
kartei3.remove(position);}}elseif(array ==4){if(position <0|| position >= kartei4.size()){JOptionPane.showMessageDialog(null,"Diese Position ist ungültig!");}else{
kartei4.remove(position);}}elseif(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:
importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Dimension;importjava.awt.FlowLayout;importjava.awt.GridLayout;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextArea;importjavax.swing.JScrollPane;importjavax.swing.ScrollPaneConstants;/**
* Dieses einfache Ausgabe Fenster gibt zeigt alle Karten an welche sich in den
* 5 verschiedenen Karteien befinden
*
* @author
* @version 18.8.2010
*
*/publicclassAusgabeFenster{privateJFrame mainFrame;privateJPanel mainPanel;privateJScrollPane x;//private JScrollPane y;privateJTextArea textFeld;publicAusgabeFenster(){
mainFrame =newJFrame("Listen Ausgabe");
mainPanel =newJPanel();
textFeld =newJTextArea();//textFeld.setPreferredSize(new Dimension(800, -1));
x =newJScrollPane(textFeld);paint();}/**
* Zeichnet das Fenster,da ich jetz noch nicht genau weiss wie dieses
* aussieht muss ich das hier später noch beschreiben
*/publicvoidpaint(){// Main Frame Einstellungen
mainFrame.setLayout(newBorderLayout());
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);}publicvoidkarteAusgeben(Karte karte,int index){
textFeld.append("Position "+ index +": "+ karte.getWort1()+" = "+ karte.getWort2()+"\n");}publicvoidkarteinummer(int kartei){
textFeld.append("\n");
textFeld.append("Kartei "+ kartei +" "+"\n"+"\n");}}
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.