# Probleme mit GUI



## speedy (31. Jan 2005)

hi, ich versuche jetzt schon den halben nachmittag eine einfache gui zu erstellen und irgendwie klappt das überhaupt nicht. 
ich habe hier meinen code gepostet, könnte mir bitte jemand verrraten, warum das nicht geht?
vielleicht kann man es erkennen, wenn nicht, ich möchte 3 eingabefelder haben und jeweil über den feldern ein label. unten rechts soll der speicherbutton sein.
vielen dank schonmal.


```
package GUI;

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


public class GUI extends JFrame{
  static int breite = 450, hoehe = 400;
  Container cp;              
  Label kennziffer, artikellabel, ueberschrift; 
  TextField ta, ta2;
  TextArea artikel;
  
  public GUI(){
    super("Doku anlegen"); 
	//textPanel1
	JPanel textPanel1 = new JPanel();
	Label kennziffer = new Label ("Kennziffer");
	ta = new TextField();
	textPanel1.add(kennziffer, BorderLayout.NORTH);
	textPanel1.add(ta, BorderLayout.SOUTH);
	
	//textPanel2
	JPanel textPanel2 = new JPanel();
	Label ueberschrift = new Label ("Überschrift");
	ta2 = new TextField();
	textPanel2.add(ueberschrift, BorderLayout.NORTH);
	textPanel2.add(ta2, BorderLayout.SOUTH);
	
	//textPanel3
	Panel textPanel3 = new Panel(new BorderLayout());
	Label artikellabel = new Label ("Artikel");
	artikel = new TextArea();		
	JButton speichern = new JButton("SPEICHERN");
	speichern.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent arg0) {
			//dbaufruf();
		}});
	textPanel3.add(artikellabel, BorderLayout.NORTH);
	textPanel3.add(artikel, BorderLayout.WEST);
	textPanel3.add(speichern, BorderLayout.SOUTH);
	
	//mainPanel
	JPanel mainPanel = new JPanel(new BorderLayout());
	mainPanel.add(textPanel1, BorderLayout.NORTH);
	mainPanel.add(textPanel2, BorderLayout.CENTER);
	mainPanel.add(textPanel3, BorderLayout.SOUTH);
	this.getContentPane().add(mainPanel);
}


  public static void main(String args[]){
  GUI g = new GUI();
    g.setDefaultCloseOperation(EXIT_ON_CLOSE); // Schließen
    g.setSize(breite,hoehe);
    g.show();
  }

}
```


----------



## DesertFox (31. Jan 2005)

Du mischst AWT & Swing, ich habs jetzt nicht probiert und deinen Code nicht ganz gelesen, aber mir ist gleich aufgefallen, dass du von JFrame erbst, aber all deine Komponenten AWT sind. Mache mal alles in Swing (musste fast überall nur vor dir Componenten ein "J" schreiben).


----------



## speedy (31. Jan 2005)

danke, erstmal für den tipp. hab das eben versucht, aber jetzt sieht es noch seltsamer aus als vorher  :?


----------



## mic_checker (31. Jan 2005)

speedy hat gesagt.:
			
		

> hi, ich versuche jetzt schon den halben nachmittag eine einfache gui zu erstellen und irgendwie klappt das überhaupt nicht.
> ich habe hier meinen code gepostet, könnte mir bitte jemand verrraten, warum das nicht geht?
> vielleicht kann man es erkennen, wenn nicht, ich möchte 3 eingabefelder haben und jeweil über den feldern ein label. unten rechts soll der speicherbutton sein.
> vielen dank schonmal.
> ...



Hier setzt du für beide Panel nicht explizit das Layout, also z.B. setLayout(new BorderLayout()); Vielleicht liegt es daran....


----------



## speedy (31. Jan 2005)

vielen dank, daran lag es.
ein problem, hab ich allerdings noch, der speicher- button geht über die ganze zeile. woran könnte das liegen?


----------



## Beni (31. Jan 2005)

Ich empfehle GridBagLayout gerührt, nicht geschüttelt:
(In "Java ist auch eine Insel" ist ein Kapitelchen über das GridBagLayout drin).

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


public class Test5 extends JFrame{
  JTextField ta, ta2;
  JTextArea artikel;
 
  public Test5(){
    super("Doku anlegen");
    
    JPanel fields = new JPanel( new GridBagLayout() );
    
    GridBagConstraints labels = new GridBagConstraints( 0, 0, 1, 1, 1.0, 1.0, 
    		GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, new Insets( 2, 2, 2, 2 ), 0, 0 );
    GridBagConstraints text = new GridBagConstraints( 1, 0, 1, 1, 100.0, 2.0, 
    		GridBagConstraints.FIRST_LINE_START, GridBagConstraints.BOTH, new Insets( 2, 2, 2, 2 ), 0, 0 );

    ta = new JTextField();
    ta2 = new JTextField();
    artikel = new JTextArea();
    
    fields.add( new JLabel( "Kennziffer"), labels );
    fields.add( ta, text );
    
    labels.gridy = 1;
    text.gridy = 1;
    fields.add( new JLabel( "Überschrift"), labels );
    fields.add( ta2, text );

    labels.gridy = 2;
    text.gridy = 2;
    text.weighty = 100.0;
    fields.add( new JLabel( "Artikel"), labels );
    fields.add( new JScrollPane( artikel ), text );
   
    JButton speichern = new JButton("SPEICHERN");
    speichern.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent arg0) {
          //dbaufruf();
       }
     });
    
    Container content = getContentPane();
    content.setLayout( new GridBagLayout() );
    content.add( fields, new GridBagConstraints( 0, 0, 1, 1, 10.0, 10.0, GridBagConstraints.FIRST_LINE_START,
    		GridBagConstraints.BOTH, new Insets( 1, 1, 1, 1 ), 0, 0 ));
    content.add( speichern, new GridBagConstraints( 0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.LAST_LINE_END,
    		GridBagConstraints.NONE, new Insets( 3, 3, 3, 3 ), 0, 0 ));
}


  public static void main(String args[]){
  Test5 g = new Test5();
    g.setDefaultCloseOperation(EXIT_ON_CLOSE); // Schließen
    g.setSize( 500, 500 );
    g.setLocationRelativeTo( null );
    g.setVisible( true );
  }

}
```


----------



## mic_checker (31. Jan 2005)

geht sicher auch anders, aber wenn du den Button auf Panel hinzufügst und das Panel in den SOUTH (statt Button allein) , müsst es eigentlich gehen....


----------



## speedy (31. Jan 2005)

ok, das versuch ich jetzt nochmal.

und vielen dank beni, das ist genau so, wie ich es wollte


----------



## speedy (2. Feb 2005)

hallo leute, das programm funktioniert jetzt soweit. jetzt bin ich an den schönheitsarbeiten 
könnt ihr mir einen tipp geben, wie ich in der textarea einen automatischen zeilenumbruch erzwingen kann?
im moment hab ich einen scrollbalken unter dem feld was allerdings nicht unbedingt schön ist...


----------



## mic_checker (3. Feb 2005)

probiers mal mit 

```
public void setLineWrap(boolean wrap)
```


----------



## speedy (3. Feb 2005)

ok, vielen dank. jetzt funktioniert alles


----------

