JTextArea in GridLayout mehrzeilig

Kalmuecke

Grünschnabel
Hi,

nachdem ich meine Eingabefelder mit dem GridLayout ausgerichtet habe, wollte ich gerne ein Eingabefeld als JTextArea darstellen und dabei die "Textbox" über mehrere Zeilen anzeigen und mit einer Scrollbar versehen. Scrollbar war kein Problem.
Aber wie bekomme ich es hin, daß meine Textbox nicht nur einzeilig angezeigt wird

Siehe Bild im Anhang!

hier noch mein Code:
/* wir setzen unseren Dialog als "modal" fest */
this.setModal(true);
this.setLayout(new BorderLayout(0, 20));

/* Titel setzen */
this.setTitle(progName + " - Neue Auktion (Verkauf) eingeben");

/* Größe des Fenster setzen */
this.setSize(700,500);

/* wenn Fenster geschlossen wird, wird auch Anwendung beendet */
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

/* Postion des Fensters setzen */
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
int xpos = (screenSize.width - getWidth()) / 2;
int ypos = (screenSize.height - getHeight()) / 2;
setLocation(xpos, ypos);

/* Benutzer kann Fenster nicht vergrößern */
//this.setResizable(false);

JPanel topicPanel = new JPanel(new GridLayout(1, 1, 10, 10));
JPanel eingabePanel = new JPanel(new GridLayout(14, 2, 3, 5));
JPanel buttonPanel = new JPanel(new GridLayout(1, 2, 10, 5));

JLabel lblTopic = new JLabel("Eingabe neuer Verkäufe:");
lblTopic.setHorizontalAlignment(JLabel.CENTER);

JLabel lblEbayName = new JLabel("eBayName:");
JTextField txtEbayName = new JTextField();
JLabel lblName = new JLabel("Name:");
JTextField txtName = new JTextField();
JLabel lblVorname = new JLabel("Vorname:");
JTextField txtVorname = new JTextField();
JLabel lblStrasse = new JLabel("Strasse:");
JTextField txtStrasse = new JTextField();
JLabel lblPlzOrt = new JLabel("Plz / Ort:");
JTextField txtPlzOrt = new JTextField();
JLabel lblLand = new JLabel("Land:");
JTextField txtLand = new JTextField();
JLabel lblTelefon = new JLabel("Telefon:");
JTextField txtTelefon = new JTextField();
JLabel lblEmail = new JLabel("Email:");
JTextField txtEmail = new JTextField();
JLabel lblArtikel = new JLabel("Gekaufte Artikel:");
JTextArea txtArtikel = new JTextArea(80,50);
JScrollPane scrollArea = new JScrollPane(txtArtikel);
txtArtikel.setPreferredSize(new Dimension(100,100));
JLabel lblBetrag = new JLabel("Gesamtbetrag (ohne Porto):");
JTextField txtBetrag = new JTextField();
JLabel lblPorto = new JLabel("Porto (in EUR):");
JTextField txtPorto = new JTextField();
JLabel lblBezahlt = new JLabel("Status - Bezahlt:");
JCheckBox txtBezahlt = new JCheckBox();
JLabel lblVerschickt = new JLabel("Status - Verschickt:");
JCheckBox txtVerschickt = new JCheckBox();
JLabel lblBewertet = new JLabel("Status - Bewertet:");
JCheckBox txtBewertet = new JCheckBox();

JButton btnSpeichern = new JButton("Speichern");
JButton btnAbbrechen = new JButton("Abbrechen");

topicPanel.add(lblTopic);

eingabePanel.add(lblEbayName);
eingabePanel.add(txtEbayName);
eingabePanel.add(lblName);
eingabePanel.add(txtName);
eingabePanel.add(lblVorname);
eingabePanel.add(txtVorname);
eingabePanel.add(lblStrasse);
eingabePanel.add(txtStrasse);
eingabePanel.add(lblPlzOrt);
eingabePanel.add(txtPlzOrt);
eingabePanel.add(lblLand);
eingabePanel.add(txtLand);
eingabePanel.add(lblTelefon);
eingabePanel.add(txtTelefon);
eingabePanel.add(lblEmail);
eingabePanel.add(txtEmail);
eingabePanel.add(lblArtikel);
eingabePanel.add(scrollArea);
eingabePanel.add(lblBetrag);
eingabePanel.add(txtBetrag);
eingabePanel.add(lblPorto);
eingabePanel.add(txtPorto);
eingabePanel.add(lblBezahlt);
eingabePanel.add(txtBezahlt);
eingabePanel.add(lblVerschickt);
eingabePanel.add(txtVerschickt);
eingabePanel.add(lblBewertet);
eingabePanel.add(txtBewertet);

buttonPanel.add(btnSpeichern);
buttonPanel.add(btnAbbrechen);

this.add(topicPanel, BorderLayout.NORTH);
this.add(eingabePanel, BorderLayout.CENTER);
this.add(buttonPanel, BorderLayout.SOUTH);


/* Button wurde geklickt */
btnSpeichern.addActionListener(this);
btnAbbrechen.addActionListener(this);

/* visible setzen sonst sehen wir das Fenster gar nicht */
//this.pack();
this.setVisible(true);
 

Anhänge

  • gridlayout_jtextarea.jpg
    gridlayout_jtextarea.jpg
    36,4 KB · Aufrufe: 218
Moin!
Deine TextArea ist mehrzeilig. Das Problem an der Sache ist, das du ein GridLayout nutzt. In einem GridLayout sind alle Komponenten gleich groß, was du auch gut an deinem Bild sehen kannst. Und es ist halt nunmal nicht genug platz, um deine Textarea sinnvoll darzustellen.
Du müsstest entweder alle Komponenten in dem EingabePanel größer machen, oder was natürlich sinnvoller wäre, ein anderes Layout nutzen..

*grüssle*
MeinerEiner
 
Moin!
Du müsstest entweder alle Komponenten in dem EingabePanel größer machen, oder was natürlich sinnvoller wäre, ein anderes Layout nutzen..

*grüssle*
MeinerEiner

Jupp, das habe ich auch gerade gedacht! Welches würdest du vorschlagen?
Denke mal es läuft auf das GridBagLayout heraus

Ps.: man ist das schön, wenn man so etwas in Visual C++ machen kann.....zack, zack...und alles ist da wo es hingehört! :)
 
Nun ein GridBagLayout ist sicherlich am flexibelsten ja. Verkehrt wäre es auf jeden Fall nicht.
Statt aber alles von Hand zu machen, kannst dir die Sache aber auch einfacher machen und eine IDE mit einem graphischen Editor nutzen, wie NetBeans oder Eclipse(wobei da meines Wissens erst noch einer nachinstalliert werden muss). Hätte aber den Nachteil, dass du wieder von vorne anfangen und du dich da erst einarbeiten musst..
Naja, hat halt alles seine Vor-und Nachteile....

*grüssle*
MeinerEiner
 
Habe mal rumexperimentiert, allerdings liegen meine Felder alle aufeinander! So ein Schiss, ich dreh durch, obwohls im Beispiel genauso gemacht wurde, t es bei mir mal wieder nicht.
Wirklich deprimierent, daß man für eine GUI Stunden braucht und die eigentliche Programmlogik ratzfatz im Kasten ist!

/* wir setzen unseren Dialog als "modal" fest */
this.setModal(true);

/* Titel setzen */
this.setTitle(progName + " - Neue Auktion (Verkauf) eingeben");

/* Größe des Fenster setzen */
this.setSize(800,500);

/* wenn Fenster geschlossen wird, wird auch Anwendung beendet */
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

/* Postion des Fensters setzen */
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
int xpos = (screenSize.width - getWidth()) / 2;
int ypos = (screenSize.height - getHeight()) / 2;
setLocation(xpos, ypos);

/* Benutzer kann Fenster nicht vergrößern */
//this.setResizable(false);

JPanel eingabePanel = new JPanel(new GridBagLayout());
GridBagConstraints gBC = new GridBagConstraints();
eingabePanel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

JLabel lblTopic = new JLabel("Eingabe neuer Verkäufe:");
lblTopic.setHorizontalAlignment(JLabel.CENTER);
gBC.fill = GridBagConstraints.HORIZONTAL;
//gBC.weightx = 0.5;
gBC.gridx = 0;
gBC.gridy = 0;
gBC.gridwidth = 4;
eingabePanel.add(lblTopic, gBC);

JLabel lblEbayName = new JLabel("eBayName:");
gBC.fill = GridBagConstraints.HORIZONTAL;
//gBC.weightx = 0.0;
gBC.gridwidth = 1;
gBC.gridx = 0;
gBC.gridy = 1;
eingabePanel.add(lblEbayName, gBC);

JTextField txtEbayName = new JTextField();
gBC.fill = GridBagConstraints.HORIZONTAL;
//gBC.weightx = 0.5;
gBC.gridwidth = 3;
gBC.gridx = 1;
gBC.gridy = 1;
eingabePanel.add(txtEbayName, gBC);

JLabel lblName = new JLabel("Name:");
gBC.fill = GridBagConstraints.HORIZONTAL;
//gBC.weightx = 0.0;
gBC.gridwidth = 1;
gBC.gridx = 0;
gBC.gridy = 2;
eingabePanel.add(lblName, gBC);

JTextField txtName = new JTextField();
gBC.fill = GridBagConstraints.HORIZONTAL;
//gBC.weightx = 0.0;
gBC.gridwidth = 3;
gBC.gridx = 0;
gBC.gridy = 2;
eingabePanel.add(txtName, gBC);

this.add(eingabePanel);
this.setVisible(true);

Kann mir jemand vielleicht ein Beispiel mit einem Textfeld in der ersten Zeile und in der zweiten Zeile ein Textfeld mit einem Label darstellen, so daß ich es für die weiteren Zeilen fortführen kann?
Ich raffs nicht, oder ich sitze zu lange schon davor..

Danke
Gruss
Muecke
 
Zuletzt bearbeitet:
Zurück