# JTextArea veränder Größe während Laufzeit; GridBagLayout



## peterchen55 (9. Aug 2006)

Guten Tag,

Ich habe 2 Probleme mit meinem Programm (source siehe unten):

1. Ich verwende das GridBagLayout (7x7). Und die verwendete JTextArea-Komponente soll 6 Spalten und 6 Zeilen groß sein. Das macht er aber nur dann, wenn das JTextArea mit mehrzeiligem Text komplett gefüllt wird. Ansonsten nimmt es weniger Platz ins Anspruch, als es soll.

2. Ich will ein JScrollPane für das JTextArea. Wenn Ich das aber mache, wird das JTextArea so klein, dass es im window so gut wie garnicht mehr erkennbar ist: Es wird winzig klein! Das darf so natürlich nicht sein, Ich will, dass es trotz JScrollPane groß bleibt (6x6!!!).

P.S.: Das Layout habe Ich mir so gedacht. In der ersten Zeile sind 7 gleich große Elemente: JLabel, JTextField, JLabel, JTextField, JLabel, JTextField, JButton. Und die nächsten 6 Spalten soll eben dieses JtextArea komplett bis zum Zeilenende ausfüllen, und halt wie gesagt: Am besten mit JScrollPane.

Hier der Source:


```
//kleiner FTP-Client, der nur Dateien im Hauptverzeichnis auflisten kann

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

import sun.net.*;
import sun.net.ftp.*;
import java.io.*;

public class FTP_Client2 extends JFrame implements ActionListener {

private JTextField tf_host = new JTextField ("ftp.adobe.com") ;
private JTextField tf_user = new JTextField ("anonymous") ;
private JTextField tf_pw = new JTextField ("a@b.c") ;

private JLabel lbl_host = new JLabel ("Host:") ;
private JLabel lbl_user = new JLabel ("User:") ;
private JLabel lbl_pw = new JLabel ("Pass:") ;

private JTextArea file_list = new JTextArea ("");

  public FTP_Client2 (String Title) {
    super (Title);
	
	GridBagLayout l = new GridBagLayout ();
    setLayout (l);
	
    setDefaultCloseOperation (EXIT_ON_CLOSE);
    setSize (600, 400);
	
	GridBagConstraints c = new GridBagConstraints ();
	
	c.fill    = GridBagConstraints.BOTH;
    c.weightx = 1;
    c.weighty = 1;
    c.gridheight = 1;
	c.gridwidth = 1;
	
    l.setConstraints (lbl_host, c);
    add (lbl_host);
	
	l.setConstraints (tf_host, c);
	add (tf_host);
	
	l.setConstraints (lbl_user, c);
	add (lbl_user);
	
	l.setConstraints (tf_user, c);
	add (tf_user);
	
	l.setConstraints (lbl_pw, c);
	add (lbl_pw);
	
	l.setConstraints (tf_pw, c);
	add (tf_pw);
	
	JButton b = new JButton ("connect");
	c.gridwidth = GridBagConstraints.REMAINDER;
	l.setConstraints (b, c);
    add (b);
    b.addActionListener (this);
	
	c.gridheight = 6;
	c.gridwidth = GridBagConstraints.REMAINDER;
	
	file_list = new JTextArea ("");
	l.setConstraints (file_list, c);
	add(file_list);
	
	setVisible (true);
  }
  
  
  public void actionPerformed(ActionEvent event) {
    if (event.getActionCommand()=="connect")
	{
		System.out.println ("--- connect ---");
		
		try {
        FtpClient ftp = new FtpClient (tf_host.getText());
        ftp.login (tf_user.getText(), tf_pw.getText());
        ftp.ascii ();
        BufferedReader r;
        InputStream t;
        String line = null;
        
        t = ftp.list ();
        line = null;
        r = new BufferedReader(new InputStreamReader(t));
		file_list.setText("");
        while ((line = r.readLine ()) != null)
		{
		if (file_list.getText().length()==0)
			file_list.setText(line);
		else
			file_list.setText(file_list.getText() + "\n" + line);
        System.out.println (line);
		}
		
        t.close ();
		
      } catch (IOException e) {
        System.err.println (e);
      }
	}
  }
  

  public static void main (String [] args) {
    new FTP_Client2 ("Hardcore FTP Client");
  }
}
```

MfG
Peter


----------



## André Uhres (10. Aug 2006)

Alle setConstraints entfernen und die JComponents so hinzufügen: add (lbl_host, c);  usw...
GridBagConstraints am Anfang:
c.weightx = 1.0;
c.weighty = 1.0;

Für Textarea:
        c.gridy = 1;
        c.gridwidth = 7;
        c.gridheight = 6;
        c.fill = GridBagConstraints.BOTH;
        c.weightx = 7.0;
        c.weighty = 6.0;

        file_list = new JTextArea("");

        add(new JScrollPane(file_list),c);


----------



## peterchen55 (10. Aug 2006)

Es funktioniert genau so wie Ich wollte!

Vielen Dank!!


----------



## peterchen55 (10. Aug 2006)

Sorry, eine Frage noch: Es ist ja in der Regel so, dass JScrollPane bei Null-Layout Probleme macht. Sollte man daher lieber die JScrollPanes absolut/fix plazieren, geht's dann besser? Oder steigt man in so einem Fall allgemein auf Grid(bag)layout um?


----------



## Wildcard (10. Aug 2006)

Du kannst ja nur absolut platzieren wenn du NullLayout verwendest, und genau das macht Probleme.
Nicht zwangsläufig Grid(Bag)Layout, sondern einfach den gerade passenden LayoutManager.


----------



## roddy (16. Jan 2007)

Ich habe ein ähnliches Problem wie der Threadstarter.

Ich möchte, dass es so aussieht:

A A B B
A A C D

A = Othello-Spielfeld
B = TextArea für den Chat
C = TextBox für Chateingabe
D = Senden Button für Chateingabe

Es sieht aber leider wie folgt aus:

Link zum Bild

Ich denke ich habe alles analog zum obigen Beispiel gemacht, daher verstehe ich nicht, dass es nicht funktioniert.

Wäre schön, wenn mir da jemand helfen könnte!

Mein Programmcode:


```
public static final int WIDTH = 870;
	public static final int HEIGHT = 435;	
	
	public GameDialog(ClientGuiSwing gui, SessionProxy session)
	{
		this.clientGui = gui;
		this.session = session;
		
		// Layout setzen:
		GridBagLayout myLayout = new GridBagLayout();
		this.setLayout(myLayout);
		
		// Spielfeld einfügen
		board = new SwingBoard();
		GridBagConstraints boardConstraints = new GridBagConstraints();
		boardConstraints.anchor = GridBagConstraints.CENTER;
		boardConstraints.fill = GridBagConstraints.BOTH;
		boardConstraints.gridheight = 2;
		boardConstraints.gridwidth = 2;
		boardConstraints.gridx = 0;
		boardConstraints.gridy = 0;
		boardConstraints.insets = new Insets(0,0,0,0);
		boardConstraints.ipadx = 0;
		boardConstraints.ipady = 0;
		boardConstraints.weightx = 2.0;
		boardConstraints.weighty = 2.0;
//		myLayout.addLayoutComponent(board, boardConstraints);
//		this.add(board);
		this.add(board, boardConstraints);
		
		JScrollPane serverMessagesScrollPane = new JScrollPane();
		serverMessagesScrollPane.setSize(435,380);
		serverMessages = new JTextArea();
		serverMessages.setEditable(false);
		serverMessagesScrollPane.setViewportView(serverMessages);		
		GridBagConstraints serverMessagesScrollPaneConstraints = new GridBagConstraints();
		serverMessagesScrollPaneConstraints.anchor = GridBagConstraints.CENTER;
		serverMessagesScrollPaneConstraints.fill = GridBagConstraints.BOTH;
		serverMessagesScrollPaneConstraints.gridheight = 1;
		serverMessagesScrollPaneConstraints.gridwidth = 2;
		serverMessagesScrollPaneConstraints.gridx = 2;
		serverMessagesScrollPaneConstraints.gridy = 0;
		serverMessagesScrollPaneConstraints.insets = new Insets(0,0,0,0);
		serverMessagesScrollPaneConstraints.ipadx = 0;
		serverMessagesScrollPaneConstraints.ipady = 0;
		serverMessagesScrollPaneConstraints.weightx = 2.0;
		serverMessagesScrollPaneConstraints.weighty = 1.0;
//		myLayout.addLayoutComponent(serverMessagesScrollPane,serverMessagesScrollPaneConstraints);
//		this.add(serverMessagesScrollPane);
		add(new JScrollPane(serverMessages),serverMessagesScrollPaneConstraints);

		messageText = new JTextField();
		messageText.setSize(400,55);
		GridBagConstraints messageTextConstraints = new GridBagConstraints();
		messageTextConstraints.anchor = GridBagConstraints.WEST;
		messageTextConstraints.fill = GridBagConstraints.HORIZONTAL;
		messageTextConstraints.gridheight = 1;
		messageTextConstraints.gridwidth = 1;
		messageTextConstraints.gridx = 2;
		messageTextConstraints.gridy = 1;
		messageTextConstraints.insets = new Insets(0,0,0,0);
		messageTextConstraints.ipadx = 0;
		messageTextConstraints.ipady = 0;
		messageTextConstraints.weightx = 1.0;
		messageTextConstraints.weighty = 1.0;
//		myLayout.addLayoutComponent(messageText,messageTextConstraints);
//		this.add(messageText);
		this.add(messageText,messageTextConstraints);

		sendButton = new JButton("Send");
		sendButton.addActionListener(this);
		GridBagConstraints sendButtonConstraints = new GridBagConstraints();
		sendButtonConstraints.anchor = GridBagConstraints.EAST;
		sendButtonConstraints.fill = GridBagConstraints.NONE;
		sendButtonConstraints.gridheight = 1;
		sendButtonConstraints.gridwidth = 1;
		sendButtonConstraints.gridx = 3;
		sendButtonConstraints.gridy = 1;
		sendButtonConstraints.insets = new Insets(0,0,0,0);
		sendButtonConstraints.ipadx = 0;
		sendButtonConstraints.ipady = 0;
		sendButtonConstraints.weightx = 1.0;
		sendButtonConstraints.weighty = 1.0;
//		myLayout.addLayoutComponent(sendButton, sendButtonConstraints);
//		this.add(sendButton);
		this.add(sendButton, sendButtonConstraints);
		
		// Listener hinzufügen
		this.addWindowListener(this);
		this.addKeyListener(this);

		// Fenster formatieren		
		this.setLocationRelativeTo(this.getParent());
		this.setLayout(new GridBagLayout());
		this.setMinimumSize(new Dimension(WIDTH, HEIGHT));
		this.setSize(WIDTH, HEIGHT);	
		this.setResizable(false);
		this.setTitle("Play Othello...");
	}
```

Danke für eure Hilfe!


----------



## André Uhres (19. Jan 2007)

```
/*
 * GameDialogDemo.java
 */
package layout;
import java.awt.*;
import javax.swing.*;
public class GameDialogDemo extends JFrame {
    public GameDialogDemo() {
        super("Play Othello...");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(820,490);
        setResizable(false);
        setLocationRelativeTo(null);
        GridBagConstraints gridBagConstraints;
        //JComponents erzeugen:
        mainPanel = new JPanel(new GridBagLayout());
        board = new JPanel();
        serverMessages = new JTextArea();
        messageText = new JTextField();
        sendButton = new JButton("Send");
        //Layout:
        board.setBackground(Color.LIGHT_GRAY);                  //board
        board.setPreferredSize(new Dimension(400, 400));
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridwidth = 4;
        gridBagConstraints.gridheight = 4;
        gridBagConstraints.fill = GridBagConstraints.BOTH;
        mainPanel.add(board, gridBagConstraints);
        serverMessages.setEditable(false);                      //serverMessages
        serverMessages.setBackground(new Color(255, 255, 204));
        serverMessages.setPreferredSize(new Dimension(400, 400));
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 4;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.gridheight = 3;
        gridBagConstraints.insets = new Insets(0, 3, 0, 0);
        mainPanel.add(new JScrollPane(serverMessages), gridBagConstraints);
        messageText.setPreferredSize(new Dimension(300, 50));   //messageText
        gridBagConstraints = new GridBagConstraints();
        gridBagConstraints.gridx = 4;
        gridBagConstraints.gridy = 3;
        gridBagConstraints.insets = new Insets(0, 3, 0, 0);
        mainPanel.add(messageText, gridBagConstraints);
        gridBagConstraints = new GridBagConstraints();          //sendButton
        gridBagConstraints.gridx = 5;
        gridBagConstraints.gridy = 3;
        mainPanel.add(sendButton, gridBagConstraints);
        getContentPane().add(mainPanel, BorderLayout.CENTER);
    }
    public static void main(String args[]) {new GameDialogDemo().setVisible(true);}
    private JButton sendButton;
    private JPanel mainPanel, board;
    private JTextArea serverMessages;
    private JTextField messageText;
}
```


----------



## roddy (23. Jan 2007)

Dankeschön . Anhand deines Beispiels hab ich's hingekriegt!


----------



## Lille Emil (17. Jul 2007)

Hallo.
Da ich erst vor kurzen mit Java angefangen habe (Lernvideo, Video2brain, Java5) und ich das Spiel Othello Klasse finde, wollte ich mal vorsichtig fragen, ob mir jemand seine Daten mir übermittelt.
Würde nämlich gerne verstehen, wie so ein Java Programm geschrieben wird. Wobei bei mir nur das Spielfeld ausreichen würde. Also Chat-Dialog wäre für mich ohne Bedeutung!
Danke.
MfG Daniel


----------

