# JButton Beschriftung



## temar (24. Apr 2012)

Hallo,

Wieso wird die Beschriftung meiner Buttons nicht richtig dargestellt, lediglich durch ... ? Ich vermute mal, dass die Buttons zu klein sind?


```
import javax.swing.*;

public class Gui extends JFrame
{
	private JPanel panel;
	private JButton button;
	private int x = 10;
	private int y = 10;
	private int val = 1;
	
	public Gui()
	{
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds(200, 150, 250, 250);
		setResizable(false);
		panel = new JPanel();
		setContentPane(panel);
		panel.setLayout(null);

		for (int i=1; i<=3; i++)
		{
			for (int j=1; j<=3; j++)
			{
				button = new JButton(Integer.toString(val));
				button.setBounds(x, y, 30, 30);
				panel.add(button);
				x += 35;
				val++;
			}
			x = 10;
			y += 35;	
		}
		
		button = new JButton("0");
		button.setBounds(x, y, 65, 30);
		panel.add(button);
	}

}
```

Danke!


----------



## pl4gu33 (24. Apr 2012)

jop das ist auch so 

arbeite nicht mit setLayout(null) oder setBounds(...) benutze LayoutManager dann klappts auch mit den Buttons 

A Visual Guide to Layout Managers (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)


und die Größe des Frames kannst du statt mit setBounds(200, 150, 250, 250); .... mit setSize(...) angeben


----------



## temar (24. Apr 2012)

Und wenn ich trotzdem mit dem null-Layout arbeiten möchte? Ich finde es am unkompliziertest, da ich mich mit den grafischen Komponenten nicht wirklich auseindersetzen möchte? Ich arbeite ja auch größtenteils mit einem GUI Plugin und copy & paste dann den Code und passe ihn gegebenenfalls an.
Kann man das Problem nicht andersweitig lösen?


----------



## pl4gu33 (24. Apr 2012)

du kannst den Button hier größer machen z.b. button.setBounds(x, y, 30, 30); dann button.setBounds(x, y, 300, 300); oder sowas .... aber es ist nicht schön !!


----------



## temar (24. Apr 2012)

pl4gu33 hat gesagt.:


> und die Größe des Frames kannst du statt mit setBounds(200, 150, 250, 250); .... mit setSize(...) angeben



ich finden setBounds() vorteilhafter, da ich ja somit auch die Position des JFrames setzen kann.


----------



## pl4gu33 (24. Apr 2012)

temar hat gesagt.:


> ich finden setBounds() vorteilhafter, da ich ja somit auch die Position des JFrames setzen kann.



mit setLocation(....) geht das auch^^

ps. habe oben noch was zu dem Buttonproblem gepostet, falls du das vll. übersehen hast


----------



## temar (24. Apr 2012)

pl4gu33 hat gesagt.:


> du kannst den Button hier größer machen z.b. button.setBounds(x, y, 30, 30); dann button.setBounds(x, y, 300, 300); oder sowas .... aber es ist nicht schön !!



und bei gleichbleibender Größe der Buttons? Keine Chance? 
Die Buttons sollen eigentlich so klein bleiben ..


----------



## temar (24. Apr 2012)

setLocation() und setSize() sind aber schon zwei Zeilen Code, was ja setBounds() vereint. Oder gibt es hierdurch irgendwelche Nachteile?


----------



## pl4gu33 (24. Apr 2012)

temar hat gesagt.:


> und bei gleichbleibender Größe der Buttons? Keine Chance?
> Die Buttons sollen eigentlich so klein bleiben ..



naja, wenn der Text nicht passt, passt er nicht  
dann vll. Schrift kleiner o.ä.


hier mal ein Thread zum NullLayout da stehen auch u.a. die Nachteile drin 

http://www.java-forum.org/awt-swing-swt/128937-nulllayout.html


----------



## temar (24. Apr 2012)

shit -.-


----------



## GUI-Programmer (24. Apr 2012)

Wenn du wirklich imo solche hässliche Buttons haben willst, dann kannst du auch den Rand noch ändern, mit 
	
	
	
	





```
setMargin(new Insets(0, 0, 0, 0));
```
, somit wird der Text auf den kompletten Button dargestellt.


----------



## temar (24. Apr 2012)

Was meinst du mit "hässlich" ?

Noch eine weitere Frage:

Wie greife ich aus dieser Klasse auf mein JTextField zu?


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

public class MyActionListener implements ActionListener
{
	private JButton button;
	
	public MyActionListener(JButton button)
	{
		this.button = button;
	}

	@Override
	public void actionPerformed(ActionEvent event)
	{
		System.out.println(button.getActionCommand());
		
		if (event.getActionCommand() == "1")
		{
//			textField.setText("1");
		}
		
	}
}
```

... entsprechend:


```
button.addActionListener((new MyActionListener(button)));
```

Danke!


----------



## GUI-Programmer (24. Apr 2012)

Ganz einfach. Stichwort Parameterübergabe. Und zwar in diesem Fall am besten per Konstrukor:

```
import java.awt.event.*;
import javax.swing.*;
 
public class MyActionListener implements ActionListener
{
    private JButton button;
    private JTextFiled textFied;
    
    public MyActionListener(JButton button, JTextField textField)
    {
        this.button = button;
        this.textField = textField;
    }
 
    @Override
    public void actionPerformed(ActionEvent event)
    {
        System.out.println(button.getActionCommand());
        
        if (event.getActionCommand() == "1")
        {
            textField.setText("1");
        }
        
    }
}
```

Also genau das selbe was du auch schon mit deinem JButton gemacht hast.

_Hat da jemand einfach Copy & Paste betrieben?!?_


----------

