# Problem mit Java-Code



## godfather22 (2. September 2012)

Hi, 
ich hab gestern mit hilfe dieses Tutorials angefangen Java zu lernen. Dazu wollte ich mir ein JFrame basteln auf den ein Knopf und ein Text zu sehen sein sollen.
Ich habe es mit diesem Quelltext versucht:


> import javax.swing.JButton;
> //import javax.swing.*;
> import javax.swing.JFrame;
> import javax.swing.JLabel;
> ...


(Kann sein, dass das alles auch einfacher geht aber ich hab erst gestern angefangen und möchte da erstmal reinkommen )
Nun ist mein Problem, dass weder JButton noch JLabel auf Änderungen, seitens set.bounds reagieren. Der Typ im Tutorial hat es ganz ohne panel gemacht aber ich hab auf einer anderen Seite davon gehört und versucht es zu implementieren. Wenn ich es ohne panel versuche erscheint nur mein JFrame ohne Text und ohne Knopf. Wäre dankbar, wenn ihr mir helfen könntet


----------



## Stryke7 (2. September 2012)

Also ohne Panel funktioniert der Quellcode so ganz wunderbar, wenn du daran denkst, den Button und den Text direkt dem Frame hinzuzufügen


----------



## godfather22 (2. September 2012)

Danke für deine Antwort. 
Wie mache ich das denn? Wie gesagt ich lerne erst seit gestern Java. Kann ich dann einfach alle befehle, die was mit dem panel zu tun haben löschen?


----------



## Stryke7 (2. September 2012)

Ja, nimm das Panel raus,  und schreibe   jf.add(b);  jf.add(text);  dazu  

Du kannst übrigens auch die import-befehle kürzen,  javax.swing.*  zu importieren reicht völlig  

Warum das mit dem panel nicht will ist mir aber gerade auch schleierhaft, hab grade etwas rumprobiert, und es will einfach nicht. wenn man das fenster vergrößert/verkleinert bleiben die beiden objekte ebenfalls an genau der stelle, wandern also von der mitte ab. irgenwas hält sie da fest, aber mir ist nicht klar was ...


----------



## godfather22 (2. September 2012)

Genauso war das auch bei mir. Mir wird langsam klar, warum das bei mir nicht ohne panel funktioniert hat: ich hab nur add(b); geschrieben und nicht jf.add(b); kein wunder das das nicht funktioniert hat. Was ist eigentlich ein panel und wofür braucht man das, wenn es auch ohne geht?


----------



## Stryke7 (2. September 2012)

add(b)  kann man nehmen, es ist gleichbedeutend mit this.add(b).  das bedeutet, deine klasse müsste von JFrame erben, dann wäre die klasse sozusagen selbst das fenster-objekt.  das mache ich meist, ist aber im grunde egal.

ein panel  (wiki)   nutze ich meist zur grafischen strukturierung.  inwiefern es sonst nutzbar ist weiß grad auch garnicht ...


----------



## godfather22 (2. September 2012)

Hab jetzt den Quelltext:


> import java.awt.Label;
> 
> import javax.swing.*;
> 
> ...



aber jetzt hab ich das Problem, dass der JButton das ganze Frame ausfüllt. Label musste ich importieren, weil sonst eclipse rumgemuckt hat.


----------



## Stryke7 (2. September 2012)

gegen das rummucken von eclipse:  es heißt  JLabel, nicht nur Label  dann läuft das auch mit swing.*

also bei mir läufts so:


```
import java.awt.Color;

import javax.swing.*;

public class Versuch1 {
    
    JLabel text;
    JButton b;
    
    public Versuch1()
    {

    JFrame jf = new JFrame();
    jf.setTitle("Mein erstes Fenster");
    jf.setSize(700, 500);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setLocationRelativeTo(null);
    jf.setLayout(null);


    text = new JLabel("to win click");
    text.setBounds(10, 10, 100, 25);
    jf.add(text);
    
    b = new JButton("here");
    b.setVisible(true);
    b.setBounds(200, 10, 100, 25);
    jf.add(b);
    
    }
public static void main (String args[]) {
    Versuch1 X = new Versuch1();

}

}
```


----------



## JimSim (3. September 2012)

Naja, wenn du Panel verwendest braucht das Panel halt nen Layout. Da arbeitet man (soweit ich mich noch dran erinnern kann, nie so der Fan von swing gewesen...) nicht mit setBounds, sondern bsp. mit dem GridLayout mit dem man dann seine Objekte ausrichtet und positioniert.
Panels sind deswegen eigentlich sehr praktisch, weil du eben nicht anfangen musst Pixel zu zählen, sondern im Panel anhand des angegebenen Layouts der Inhalt logisch automatisch positioniert wird.


----------



## Stryke7 (3. September 2012)

Deshalb hab ich das Layout mit setLayout(null) abgeschaltet.

das thema ist recht leicht, layouts sind wie der name schon sagt vorgefertigte anordnungsmuster. damit kannst du recht leicht die grafischen objekte  zu den meistgenutzten ansichten ordnen.


----------



## godfather22 (5. September 2012)

Jau danke. Nachdem ich das Layout abgeschaltet hab gehts jetzt *tumb up*


----------



## Stryke7 (5. September 2012)

Gut 

Freut mich auch, dass meine bescheidenen Java-Kenntnise schon jemandem helfen konnten, vom Profi bin ich ja auch noch weit entfernt


----------



## godfather22 (6. September 2012)

Sei mal nicht so bescheiden...


----------



## Stryke7 (6. September 2012)

godfather22 schrieb:


> Sei mal nicht so bescheiden...


 
ja doch, bisher habe ich nur ein bisschen in der schule gelernt, aber so richtig gut kann ich java noch nicht


----------



## godfather22 (6. September 2012)

naja... genug um mir aus der patsche zu helfen ^^


----------

