# String in JFrame ausgeben



## Rockfreak (21. Dez 2010)

Wie schon in der Überschrift gesagt, möchte ich Texte in meinem JFrame ausgeben.
Ich habe einen kleinen MusicPlayer gebastelt und möchte jetzt die Knöpfe beschriften.
Habe alles soweit ich wusste gemacht aber die Schrift wird nicht ausgegeben und Fehlermeldungen gibt es auch nciht.

Hier mal der Code

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

public class NewWindow extends JFrame  
{
    protected static final long serialVersionUID = 1;
    protected ImageIcon play = new ImageIcon(NewWindow.class.getResource("play.png"));
    protected ImageIcon stop = new ImageIcon(NewWindow.class.getResource("stop.png"));
    protected ImageIcon pause = new ImageIcon(NewWindow.class.getResource("pause.png"));
    protected ImageIcon eject = new ImageIcon(NewWindow.class.getResource("eject.png"));
    private JButton buttonplay = new JButton (play);
    private JButton buttonstop = new JButton (stop);
    private JButton buttonpause = new JButton (pause);
    private JButton buttoneject = new JButton (eject);
    JLayeredPane ebene;
    
    // Schrift über/unter den Buttons
     private String ausgabeText="Play";
	 private JTextField ausgabe= new JTextField(ausgabeText, 10);
 	// Textfelder Font definieren
  	Font textFont = new Font ("Square 721 BT", NORMAL, 20);
    
      public NewWindow()                                                                    
        {
                 super("MusicPlayer");      						// Text oben in der Leiste                                                     
                 setSize(700,200);                                  // Fenster Größe
                 setLocation(300,300);                              // Wo sich das Fenster beim starten befinden soll                     
                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    // Schließe Fenster und Programm beim beenden 
                 setBackground(Color.LIGHT_GRAY);
                 setLayout(null);
                 
                 MyJPanel mp = new MyJPanel();						// initialisiert das Panel für den Hintergrund
                 mp.setLayout(null);
                 
                 ebene = this.getLayeredPane();
                 ebene.add(mp, JLayeredPane.FRAME_CONTENT_LAYER, 0);
                 
                 int buttonx=100;									// x-Koordinate für die Buttons
                 int buttony=110;									// y-Koordinate für die Buttons
                 int buttonw=48;									// größe der Buttons
                 int buttonh=48;									// größe der Buttons
                 mp.setBounds(0,0,700,200);
                 buttonstop.setBounds(200, buttony, buttonw, buttonh);
                 buttonstop.setBorder(null);
                 buttoneject.setBounds(50, buttony, buttonw, buttonh);
                 buttoneject.setBorder(null);
                 buttonplay.setBounds(buttonx, buttony, buttonw, buttonh);
                 buttonplay.setBorder(null);
                 buttonpause.setBounds(150, buttony, buttonw, buttonh);
                 buttonpause.setBorder(null);
                 mp.add(buttoneject);
                 mp.add(buttonstop);
                 mp.add(buttonplay);
                 mp.add(buttonpause);    
                 buttonstop.setActionCommand("Stop");                               
                 buttoneject.setActionCommand("Öffnen");                                
                 buttonplay.setActionCommand("Start");
                 buttonpause.setActionCommand("Pause");

             	//Groesse, Positionen und Fonts der randlosen Textfelder
         	   int textx=100;
         	   int texty=250;
         	   int textw=100;
         	   int texth=100;
              
         	  // textx=butx+butw;
         	  // textw=200;
         	   ausgabe.setBounds(textx,texty,textw,texth);
         	   ausgabe.setFont(textFont);
         	   ausgabe.setBackground(Color.black);
              //  ausgabe.setHorizontalAlignment(JTextField.LEFT); 
         	  //  ausgabe.setHorizontalAlignment(JTextField.RIGHT); 
         	   ausgabe.setBorder(null);
               ausgabe.setOpaque(false);
               
               add(ausgabe);  // Textausgeben "play"
                                
                 // Menü-Leiste
                 MenuBar mb = new MenuBar();    
                        
                 // Ein Menü
                 Menu m1 = new Menu("Datei");
                 mb.add(m1);
 
                 // Menüeinträge
                 MenuItem oeff = new MenuItem("Öffnen");
                 MenuItem schl = new MenuItem("Schließen");
                 
                 // Menue Action
                 MenueSchliessenService menueSchliessen = new MenueSchliessenService(this);
                 schl.addActionListener(menueSchliessen);
                 // Datai auswählen
                 OeffnenDialogClass odc = new OeffnenDialogClass();
                 oeff.addActionListener(odc);
                 // Datei abspielen
                 setMenuBar(mb);
                 m1.add(schl);  
                 m1.add(oeff); 
                 // Actionlistener für die Buttons   
                 buttoneject.addActionListener(odc);
                 buttonplay.addActionListener(odc);
                 buttonstop.addActionListener(odc);
                 buttonpause.addActionListener(odc); 
        }

}
```


----------



## tfa (21. Dez 2010)

Schrift bekommt man in Buttons mit setText(String).
Aber wozu noch Schrift, wenn du doch schon Icons hast?


----------



## XHelp (21. Dez 2010)

Dann gibt dennen auch Texte:

```
new JButton("Text", icon)
```


----------



## Rockfreak (21. Dez 2010)

mache ich das nicht genau hier:

```
// Schrift über/unter den Buttons
     private String ausgabeText="Play";
	 private JTextField ausgabe= new JTextField(ausgabeText, 10);
```


----------



## Michael... (21. Dez 2010)

Rockfreak hat gesagt.:


> mache ich das nicht genau hier:
> 
> ```
> // Schrift über/unter den Buttons
> ...


Dachte Du willst die Buttons beschriften, hier wird nur ein Eingabefeld mit "Play" vorgefüllt.


----------



## Rockfreak (21. Dez 2010)

ja ich möchte das über jedem Button steht, was der button macht. Play, Stop etc.


----------



## Rockfreak (21. Dez 2010)

XHelp hat gesagt.:


> Dann gibt dennen auch Texte:
> 
> ```
> new JButton("Text", icon)
> ```



hab ich mal versucht aber dann will er das neben das entsprechende Icon machen aber ich hätte es gern drunter oder drüber...


----------



## SlaterB (21. Dez 2010)

such doch mal ne Stunde lang im Internet nach JLabel mit Icon,
in Tutorials oder Beispielen kommst du vielleicht an deinem gesuchten Ergebnis vorbei..

zum JTextField:
du fügst es direkt in das JFrame ein, während die Buttons im MyPanel landen,
darin passt die Höhe von 250 auch nicht besonders gut

jetzt sehe ich dass du das JTextField vielleicht extra unter das MyPanel platzieren willst,
auch dafür ist es zu tief bzw. da ist gar kein Platz vorhanden, 
Play wird anscheinend im unteren möglichen Bereich gemalt, 
bei y = 250 und Höhe 100 musst du schon bis zu Position 350 runterschauen, dein JFrame ist aber auch wieder in der Höhe auf 200 begrenzt..


----------



## Rockfreak (21. Dez 2010)

na so langsam wirds 
Wenn ich das JFrame auf den Wert y= 400 setze und text y auf 170 dann seh ich schon mal den text im nicht sichtbaren bereich, wie du sagtest. Wenn ich ihn jetzt hoch setzte sehe ich noch kurz beim Start den Text und dann wird er wohl vom hintergrund übermalt, wo setzte ich den text denn am besten an, so dass er auch gezeigt wird?


Ach so, ich will nicht wissen wieviel stunden ich schon gegoogelt hab aber wenn man die richtigen stichworte nicht kennt...

danke schon mal


----------



## SlaterB (21. Dez 2010)

wieso 170 wenn MyPanel bis 200 reicht? ich würde darunter anfangen, z.B. 210 und erstmal als Höhe nur 30 oder so, für eine Zeile reicht das vielleicht,

> Ach so, ich will nicht wissen wieviel stunden ich schon gegoogelt hab aber wenn man die richtigen stichworte nicht kennt...

deswegen sage ich ja jetzt, suche nach 'JLabel mit Icon',
Google

erster Link
Adding an Icon to a JLabel Component | Example Depot
dort steht 

```
// Create a label with text and an icon; the icon appears to the left of the text 
JLabel label = new JLabel("Text Label", icon, JLabel.CENTER);
```
schon könnte dir eine vielleicht bisher unbekannte Art von Platzierung innerhalb des JLabels auffallen,
spätestens jetzt den zugehörigen Konstruktor nachschlagen (schon vorher hätte in der API nach Möglichkeiten gesucht werden können),
führt zum Begriff 'horizontalAlignment', da ist bestimmt vertical auch nicht fern, das sind mindestens neue gute Suchbegriffe

ich sage noch nicht dass das gleich dein Problem löst, nur dass du mit wenig Arbeit selber viel erreichen kannst,
wenn du dann immer noch fragen musst klingt 
'ich habe JLabel mit verschiedenen Alignment-Optionen ausprobieren, aber wie genau erreicht man xy?' 
schon viel angenehmer als nur 'wie macht man [eines von tausend Problemen an diesem Tag]?'


----------



## Rockfreak (26. Dez 2010)

Habe alles so gemacht, wie du es empfohlen hast. Aber ich bekomme nur Fehlermeldungen.

Bei:

```
JLabel buttonstop = new JLabel("STOP", stop, JLabel.CENTER);
```
macht er zwar den Button aber neben dem Button ist nur ein schwarzer punkt (rechts daneben)
Bei:

```
buttonstop.setVerticalTextPosition(JLabel.BOTTOM);
buttonstop.setHorizontalTextPosition(JLabel.CENTER);
```
kommen nur noch Fehlermeldungen in Eclipse. 
Und so steht es in allen Anleitungen...


----------

