# Textabstand bei Buttons ändern



## Last_Dodo (26. Mrz 2009)

Guten Abend liebe Programmier-Kollegen,

ich führe mit 2 Klassenkollegen ein Projekt namens LED-Matrix durch. Es ist eine Platine mit einem Meter länge und immer wieder 8 Leuchtdioden nach oben. Durch dieses Display soll immer ein Text durchlaufen.
Wenn man diesen Text zurzeit jedoch ändern will, muss man direkt in das Programm des Microchips gehen und das dort ändern. Das ist jedoch sehr umständlich (vor allem, wenn die Platine irgendwo hängt).

Jetzt haben wir uns gedacht, dass es doch toll wäre, wenn wir ein Programm für den PC hätten, über welches man die Platine steuern kann. Nach den ersten Skizzen und den ersten Codeschnippseln kam ich zum ersten Problem welches sich nicht lösen ließ. Und Zwar: Ich habe einen Button, der schön in die Zeile passen soll. Jedoch ist dieser Button etwas größer als der Text, *bei selber Textgröße!*
Wenn ich die Textgröße ändere, sieht es dumm aus.

Hier ein Screenshot: http://godmaster.go.funpic.de/Swing_button_problem.jpg

Hier der Code des Buttons:
[highlight=Java]JButton hinzufuegenOK = new JButton("OK");
hinzufuegenOK.setFont(new Font(Font.MONOSPACED, Font.BOLD, 15));
hinzufuegenOK.setMargin(new java.awt.Insets(1, 1, 1, 1));[/highlight]

*Gibt es eine Möglichkeit den Abstand zwischen Buttonrand und Text zu verkleinern?

*Mit freundlichen Grüßen
Last_Dodo


----------



## Geeeee (27. Mrz 2009)

Setze mal die Insets auf negative Werte, also besonders eben top und bottom. Weiss aber nicht, ob da jedes LookAndFeel mitmacht.


----------



## Last_Dodo (27. Mrz 2009)

Hab ich schon versucht,
Leider gabs eine Wrong-Param-Exception


----------



## Geeeee (27. Mrz 2009)

Bei mir klappt es ohne Anstand. Mir sagt eine WrongParamException auch mal überhaupt gerade gar nix (weil sie evtl. auch nicht zur java api gehört ???:L )
Passt genau rein. ABER MouseOver ist natürlich dann nicht mehr schön 
[HIGHLIGHT="Java"]
public static void main(String... args) {
		JFrame frame = new JFrame();
		frame.setLayout(new GridBagLayout());
		JButton justWhatINeedButton = new JButton("Test");
		justWhatINeedButton.setFont(new Font("monospaced",Font.BOLD,18));
		justWhatINeedButton.setMargin(new Insets(-10,-2,-8,-2));
		frame.add(justWhatINeedButton);
		frame.setSize(400,400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
[/HIGHLIGHT]


----------



## Ebenius (27. Mrz 2009)

In einem solchen Fall sollte man die Margins nicht verändern. Das kann je nach Look and Feel extrem blöd aussehen. Außerdem sind zu kleine Buttons eine Qual für jeden der einen Touchscreen benutzt. Akzeptier lieber die Grundeinstellung des Look and Feels und mach dafür die Combo Box höher. Zum Beispiel so in etwa: [Highlight=Java]// constraints for left column
final GridBagConstraints gbcLeft = new GridBagConstraints();
gbcLeft.fill = GridBagConstraints.BOTH;
gbcLeft.insets.top = gbcLeft.insets.bottom = 3;
gbcLeft.gridy = GridBagConstraints.RELATIVE;

gbcLeft.gridx = 0;
gbcLeft.weightx = 0;
gbcLeft.insets.left = 6;
gbcLeft.insets.right = 6;

// constraints for middle column
final GridBagConstraints gbcMid = (GridBagConstraints) gbcLeft.clone();
gbcMid.gridx = 1;
gbcMid.weightx = 10;

// constraints for right column
final GridBagConstraints gbcRight = (GridBagConstraints) gbcLeft.clone();
gbcRight.gridx = 2;
gbcRight.weightx = 0;

// constraints for spanned column middle+right
final GridBagConstraints gbcJoin = (GridBagConstraints) gbcMid.clone();
gbcJoin.gridwidth = 2;

final JPanel controlPanel = new JPanel(new GridBagLayout());

// first row
controlPanel.add(new JLabel("Status:"), gbcLeft);
controlPanel.add(new JLabel("Not connected"), gbcJoin);

// second row
controlPanel.add(new JLabel("Hinzufügen:"), gbcLeft);
final JComboBox combo = new JComboBox(new Object[] { "Text" });
combo.setPrototypeDisplayValue("wwwwwwwwwwwwwww");
controlPanel.add(combo, gbcMid);
controlPanel.add(new JButton("OK"), gbcRight);[/Highlight]
Mit nem hübschen Border könnte das so aussehen: Metal L&F:  Nimbus L&F:  
Ebenius


----------



## Geeeee (27. Mrz 2009)

Meine Lösung sollte eigentlich auch nur Mittel zum Zweck sein


----------



## Last_Dodo (28. Mrz 2009)

Jetzt gehts ohne Exception 
Naja danke jedenfalls, klappt mit negativen Margins.

@Ebenius:
Ja ich weiß, dass das da stören kann.
Aber die Softwär wird nur mit den Laptops in unserem Lehrerzimmer genutzt. Bzw. mit dem Laptop meines Lehrers, weil man eine Serielle VErbindung mit der Platte aufbauen muss, also denke ich, kann man das verkraften.

Mit freundlichen Grüßen
Last_Dodo


----------

