# TextArea und ScrollBar



## addamain (11. Mai 2011)

Hallo zusammen,

ich habe leider ein kleines Problem, aber ich hoffe dass mir jm von euch Helfen kann...

Ich habe eine TextArea bei der der Textinhalt weiter nach unten hinausgeht - daher brauche ich einen Scrollbalken - google hat mir JScrollBar geliefert.

Meine TextArea sieht so aus:


```
private JTextArea taPositionen = null;
jContentPane.add(getTaPositionen(), null);

private JTextArea getTaPositionen() {
	if (taPositionen == null) {
	taPositionen = new JTextArea();
	taPositionen.setBounds(new Rectangle(15, 305, 450, 160));
	}
	return taPositionen;
}
```

Wie bzw. Was muss ich machen, damit ich rechts neben der TextArea einen Scrollbalken bekommen, mit dem man nach unten Scrollen kann?

Ich bedanke mich schonmal ganz Herzlich bei allen Helfenden 

Liebe Grüße, Addamain


----------



## Runtime (11. Mai 2011)

Ersetze jContentPane.add(getTaPositionen(), null) durch jContentPane.add(new JScrollPane(getTaPositionen()), null).


----------



## addamain (11. Mai 2011)

Ok, habe vergessen den Code von der ScrollBar einzusetzen:


```
private JScrollBar jScrollBar = new JScrollBar();
jContentPane.add(getJScrollBar(), null);

private JScrollBar getJScrollBar() {
	if (jScrollBar == null) {
		jScrollBar = new JScrollBar();
		jScrollBar.setBounds(new Rectangle(446, 270, 33, 113));
	}
	return jScrollBar;
}
```

Habe jetzt gemacht was du geschrieben hast, aber wie muss ich nun vorgehen? Irgendwie komme ich mit den Beispielen ned weiter, die mir Google liefert...

Danke dir aber schonmal vielmals für die schnelle Hilfe.

Grüße, Addamain


----------



## Miness (12. Mai 2011)

Du hast jetzt deinen ganzen Code für JScrollBar angepasst, aber du musst nur Zeile 2 so ergänzen, wie es Runtime beschrieben hat (Achtung: mit JScroll*Pane*, nicht JScrollBar):


```
private JTextArea taPositionen = null;
jContentPane.add(new JScrollPane(getTaPositionen()), null);
 
private JTextArea getTaPositionen() {
    if (taPositionen == null) {
    taPositionen = new JTextArea();
    taPositionen.setBounds(new Rectangle(15, 305, 450, 160));
    }
    return taPositionen;
}
```

Du übergibst also deine JTextArea dem Konstruktor von JScrollPane, und schon hat die TextArea einen Scrollbalken!


----------



## addamain (12. Mai 2011)

Wenn ich


```
jContentPane.add(getTaPositionen(), null);
```

in


```
jContentPane.add(new JScrollPane(getTaPositionen()), null);
```

ändere, dann verschwindet die TextArea - sie wird mir nicht mehr im GUI Editor sowie auch in der Compilierten Form angezeigt...

Habe ich was übersehen?

Danke euch beiden.

Grüße, Addamain


----------



## Runtime (12. Mai 2011)

Kannst du mal den ganzen Code von der GUI posten? Ich denke nicht, dass der Fehler von dem oben stehenden Coe ausgeht.


----------



## addamain (12. Mai 2011)

```
package paketAuftrag;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Rectangle;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JScrollBar;
import javax.swing.ScrollPaneConstants;
import java.awt.Font;

public class Hauptfenster extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private Auftrag aktAuftrag = new Auftrag();  //  @jve:decl-index=0:
	private JButton btEnde = null;
	private JLabel jLabel = null;
	private JTextField tfAuftrNr = null;
	private JLabel jLabel1 = null;
	private JLabel jLabel2 = null;
	private JLabel jLabel3 = null;
	private JLabel jLabel4 = null;
	private JLabel lbKdNr = null;
	private JLabel lbAuftrDat = null;
	private JLabel lbKdName = null;
	private JLabel lbAuftrTermin = null;
	private JLabel jLabel5 = null;
	private JLabel jLabel6 = null;
	private JLabel jLabel7 = null;
	private JLabel jLabel8 = null;
	private JLabel lbGesammtWert = null;
	private JButton btNeueSuche = null;
	private JTextArea taPositionen = null;
	private JScrollBar jScrollBar = null;
	private JLabel jLabel9 = null;
	public Hauptfenster() {
		super();
		initialize();
		lbAuftrDat.setVisible(false);
		lbAuftrTermin.setVisible(false);
		lbKdName.setVisible(false);
		lbKdNr.setVisible(false);
		jLabel1.setVisible(false);
		jLabel2.setVisible(false);
		jLabel3.setVisible(false);
		jLabel4.setVisible(false);
		jLabel7.setVisible(false);
		jLabel8.setVisible(false);
		lbGesammtWert.setVisible(false);
		btNeueSuche.setVisible(false);
		taPositionen.setVisible(false);
		jScrollBar.setVisible(false);
	}

	private void initialize() {
		this.setSize(500, 635);
		this.setContentPane(getJContentPane());
		this.setTitle("Auftragverwaltung");
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jLabel9 = new JLabel();
			jLabel9.setBounds(new Rectangle(70, 9, 342, 47));
			jLabel9.setFont(new Font("Dialog", Font.BOLD, 36));
			jLabel9.setText("Auftragsverwaltung");
			lbGesammtWert = new JLabel();
			lbGesammtWert.setBounds(new Rectangle(110, 470, 355, 20));
			lbGesammtWert.setText("lbGesammtWert");
			jLabel8 = new JLabel();
			jLabel8.setBounds(new Rectangle(15, 470, 90, 20));
			jLabel8.setText("Gesammtwert:");
			jLabel7 = new JLabel();
			jLabel7.setBounds(new Rectangle(15, 280, 450, 20));
			jLabel7.setText("Folgende Positionen sind in dem Auftrag enthalten:");
			jLabel6 = new JLabel();
			jLabel6.setBounds(new Rectangle(15, 120, 450, 20));
			jLabel6.setText("Eingabe mit der Entertaste.");
			jLabel5 = new JLabel();
			jLabel5.setBounds(new Rectangle(15, 100, 450, 20));
			jLabel5.setText("Bitte geben Sie eine Auftragsnummer ein und bestätigen Sie Ihre");
			lbAuftrTermin = new JLabel();
			lbAuftrTermin.setBounds(new Rectangle(115, 240, 350, 20));
			lbAuftrTermin.setText("lbAuftrTermin");
			lbKdName = new JLabel();
			lbKdName.setBounds(new Rectangle(115, 180, 350, 20));
			lbKdName.setText("lbKdName");
			lbAuftrDat = new JLabel();
			lbAuftrDat.setBounds(new Rectangle(115, 210, 350, 20));
			lbAuftrDat.setText("lbAuftrDat");
			lbKdNr = new JLabel();
			lbKdNr.setBounds(new Rectangle(115, 150, 350, 20));
			lbKdNr.setText("lbKdNr");
			jLabel4 = new JLabel();
			jLabel4.setBounds(new Rectangle(15, 240, 100, 20));
			jLabel4.setText("Auftragstermin:");
			jLabel3 = new JLabel();
			jLabel3.setBounds(new Rectangle(15, 210, 100, 20));
			jLabel3.setText("Auftragsdatum:");
			jLabel2 = new JLabel();
			jLabel2.setBounds(new Rectangle(15, 180, 100, 20));
			jLabel2.setText("Kundenname:");
			jLabel1 = new JLabel();
			jLabel1.setBounds(new Rectangle(15, 150, 100, 20));
			jLabel1.setText("Kundennummer:");
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(15, 60, 180, 25));
			jLabel.setText("Auftragsnummer:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBtEnde(), null);
			jContentPane.add(jLabel, null);
			jContentPane.add(getTfAuftrNr(), null);
			jContentPane.add(jLabel1, null);
			jContentPane.add(jLabel2, null);
			jContentPane.add(jLabel3, null);
			jContentPane.add(jLabel4, null);
			jContentPane.add(lbKdNr, null);
			jContentPane.add(lbAuftrDat, null);
			jContentPane.add(lbKdName, null);
			jContentPane.add(lbAuftrTermin, null);
			jContentPane.add(jLabel5, null);
			jContentPane.add(jLabel6, null);
			jContentPane.add(jLabel7, null);
			jContentPane.add(jLabel8, null);
			jContentPane.add(lbGesammtWert, null);
			jContentPane.add(getBtNeueSuche(), null);
			jContentPane.add(getTaPositionen(), null);
			jContentPane.add(getJScrollBar(), null);
			jContentPane.add(jLabel9, null);
		}
		return jContentPane;
	}

	private JButton getBtEnde() {
		if (btEnde == null) {
			btEnde = new JButton();
			btEnde.setBounds(new Rectangle(9, 515, 465, 30));
			btEnde.setText("beenden");
			btEnde.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					System.exit(1);
				}
			});
		}
		return btEnde;
	}

	private JTextField getTfAuftrNr() {
		if (tfAuftrNr == null) {
			tfAuftrNr = new JTextField();
			tfAuftrNr.setBounds(new Rectangle(200, 60, 100, 25));
			tfAuftrNr.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					jLabel6.setVisible(false);
					jLabel5.setVisible(false);
					jLabel1.setVisible(true);
					jLabel2.setVisible(true);
					jLabel3.setVisible(true);
					jLabel4.setVisible(true);
					lbAuftrDat.setVisible(true);
					jLabel7.setVisible(true);
					jLabel8.setVisible(true);
					lbGesammtWert.setVisible(true);
					lbAuftrTermin.setVisible(true);
					lbKdName.setVisible(true);
					lbKdNr.setVisible(true);
					btNeueSuche.setVisible(true);
					taPositionen.setVisible(true);
					jScrollBar.setVisible(true);
					taPositionen.setText("");
					lbAuftrDat.setText("");
					lbAuftrTermin.setText("");
					lbKdName.setText("");
					lbKdNr.setText("");
					lbGesammtWert.setText("");
					taPositionen.setText("");
					aktAuftrag.setAuftrNr(tfAuftrNr.getText());
					aktAuftrag.datenHolen();
					aktAuftrag.kundenName();
					aktAuftrag.positionenDaten();
					int mAnzahl = aktAuftrag.positionenHolen();
					if(mAnzahl!=0)
					{
					lbKdNr.setText(aktAuftrag.getKunden().getKdnr());
					lbKdName.setText(aktAuftrag.getKunden().getKdName());
					lbAuftrDat.setText(aktAuftrag.getAuftrDat());
					lbAuftrTermin.setText(aktAuftrag.getAuftrTermin());
					double mGesamt=0;

					for(int i=0; i<mAnzahl; i++)
					{
						mGesamt=mGesamt+aktAuftrag.getPositionen(i).berechnePosition();
						taPositionen.append(aktAuftrag.getPositionen(i).getArtNr() + "   ");
						taPositionen.append(aktAuftrag.getPositionen(i).getBez() + "   ");
						taPositionen.append(aktAuftrag.getPositionen(i).getMenge() + "x   ");
						taPositionen.append(String.valueOf(aktAuftrag.getPositionen(i).berechnePosition()));
						taPositionen.append("\n");
					}
					lbGesammtWert.setText(String.valueOf(mGesamt) + " €");
					
					}
				}
			});
		}
		return tfAuftrNr;
	}

	private JButton getBtNeueSuche() {
		if (btNeueSuche == null) {
			btNeueSuche = new JButton();
			btNeueSuche.setBounds(new Rectangle(9, 555, 465, 30));
			btNeueSuche.setText("neue Eingabe");
			btNeueSuche.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					lbAuftrDat.setVisible(false);
					lbAuftrTermin.setVisible(false);
					lbKdName.setVisible(false);
					lbKdNr.setVisible(false);
					jLabel1.setVisible(false);
					jLabel2.setVisible(false);
					jLabel3.setVisible(false);
					jLabel4.setVisible(false);
					jLabel7.setVisible(false);
					jLabel8.setVisible(false);
					lbGesammtWert.setVisible(false);
					btNeueSuche.setVisible(false);
					jLabel5.setVisible(true);
					jLabel6.setVisible(true);
					taPositionen.setVisible(false);
					jScrollBar.setVisible(false);
					lbAuftrDat.setText("");
					lbAuftrTermin.setText("");
					lbKdName.setText("");
					lbKdNr.setText("");
					lbGesammtWert.setText("");
					taPositionen.setText("");
				}
			});
		}
		return btNeueSuche;
	}

	private JTextArea getTaPositionen() {
		if (taPositionen == null) {
			taPositionen = new JTextArea();
			taPositionen.setBounds(new Rectangle(15, 305, 425, 155));
		}
		return taPositionen;
	}

	private JScrollBar getJScrollBar() {
		if (jScrollBar == null) {
			jScrollBar = new JScrollBar();
			jScrollBar.setBounds(new Rectangle(440, 305, 20, 155));
		}
		return jScrollBar;
	}


}
```

Gerne, wenn ihr damit mehr anfangen könnt 

Danke für eure Hilfe


----------



## Runtime (12. Mai 2011)

```
jContentPane.add(getTaPositionen(), null);
jContentPane.add(getJScrollBar(), null);
```
Du hast ja immer noch die JScrollBar. Die kannst du wegschmeissen und
	
	
	
	





```
jContentPane.add(getTaPositionen(), null);
```
 in 
	
	
	
	





```
jContentPane.add(new JScrollPane(getTaPositionen()), null);
```
 ändern.


----------



## addamain (12. Mai 2011)

Ist das so richtig:


```
//jContentPane.add(getTaPositionen(), null);
			//jContentPane.add(getJScrollBar(), null);
			jContentPane.add(new JScrollPane(getTaPositionen()), null);
```

Wenn ich das so drin stehen habe, dann verschwindet die TextArea und der Scroll Balken...


----------



## Runtime (12. Mai 2011)

Gib mal die Grösse der JTextArea und des JScrollPanes aus.


----------



## addamain (15. Mai 2011)

Runtime hat gesagt.:


> Gib mal die Grösse der JTextArea und des JScrollPanes aus.



Wie geht das?


----------



## L-ectron-X (16. Mai 2011)

Runtime hat gesagt.:


> Gib mal die Grösse der JTextArea und des JScrollPanes aus.





addamain hat gesagt.:


> Wie geht das?


Probiere mal

```
System.out.println("JTextArea - preferred size: "+textArea.getPreferredSize().width+" x "+textArea.getPreferredSize().height);
System.out.println("JTextArea - size: "+textArea.getSize().width+" x "+textArea.getSize().height);
System.out.println("JScrollPane - preferred size: "+scrollPane.getPreferredSize().width+" x "+scrollPane.getPreferredSize().height);
System.out.println("JScrollPane - size: "+scrollPane.getSize().width+" x "+scrollPane.getSize().height);
```
Du brauchst dazu aber eine Referenz auf deine JScrollpane.


----------



## addamain (17. Mai 2011)

Beim Ausführen der 4 Zeilen Code bekomme ich folgendes ausgegeben:



> JTextArea - preferred size: 406 x 42
> JTextArea - size: 425 x 155
> JScrollPane - preferred size: 17 x 61
> JScrollPane - size: 20 x 155



Danke für eure Hilfe


----------



## Runtime (17. Mai 2011)

Ich hab grad gemerkt, dass du das Null-Layout nimmst - NULL LAYOUTS SIND BÖSE!
Wie du ein richtiges Layout benutzt findest du hier.
In der FAQ gibts ebenfalls Beiträge zu LayoutManagern.

Du kannst auch einen GUI Builder verwenden, wenns dir zu mühsam wird.


----------



## addamain (17. Mai 2011)

Runtime hat gesagt.:


> Du kannst auch einen GUI Builder verwenden, wenns dir zu mühsam wird.



Ich benutze Eclipse zum Coden, da ist n Visual Editor mit dabei, weiß jetzt grad ned mehr welcher das ist... Der legt halt die "null" Sachen so an wie sie da sind...

Warum ist das Null Layout ned so gut?

Wie komme ich jetzt mit meinem Scrollbalken weiter?

Danke für eure Hilfe 

Liebe Grüße, Addamain


----------



## Runtime (17. Mai 2011)

Doing Without a Layout Manager (Absolute Positioning) (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)Der erste Abschnitt.

Momentan habe ich grad keinen Schimmer, was falsch sein könnte.


----------



## addamain (17. Mai 2011)

Runtime hat gesagt.:


> Momentan habe ich grad keinen Schimmer, was falsch sein könnte.



Vielleicht hat jm anderes vllt noch ne Idee?

Warum ist denn jetzt das "NULL LAYOUT" so böse?

Grüße, Addamain


----------



## Runtime (17. Mai 2011)

Wenn das Fenster ein anderes LAF hat, dann stimmen die Grössen nicht.


----------

