# Beschriftung von Buttons



## schlydi (5. Mai 2009)

Hallo,

ich habe zwei Probleme:
ersten hätte ich gerne eine rechtsbündige Beschriftung eines JLabels, zweitens würde ich gerne JToggleButtons mit Text beschriften, der aber, wie in einer Tabelle, zweispaltig, d.h. ähnliche Teile untereinander gleichbündig abschließend sein soll. 
Probiert habe ich folgendes:

```
import java.awt.*;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.TitledBorder;

public class Build extends JFrame {

    GridLayout gl = new GridLayout(0,2);
	GridLayout gl2 = new GridLayout(8,0);
	AbstractButton tb;
	ButtonGroup bg1;
	ButtonGroup bg2;

public void build(final Container pane) throws IOException {

        JPanel p0 = new JPanel();
    	JPanel p1 = new JPanel();
        JPanel p2;
        JPanel p3;
        
        JLabel sz1 = new JLabel("Text xy");
        JLabel sz2 = new JLabel("Text xy");
        JLabel sz3 = new JLabel("Text xy");
        JLabel es = new JLabel("<html><table><tr>hier kommt ein etwas längerer Text mit Zeilenumbruch, gerne rechtsbündig</tr><tr>weiterer Text</tr></table</html>");
        JLabel zs = new JLabel("<html><table><tr>ein zweiter Text mit Zeilenumbruch, linksbündig</tr><tr>funktioniert sowieso</tr></table></html>");
        
        sz1.setFont(new Font("Arial", Font.BOLD, 34));
        sz2.setFont(new Font("Arial", Font.PLAIN, 11));
        sz2.setPreferredSize(new Dimension(300,40));
        sz2.setVerticalAlignment(1);
        sz3.setFont(new Font("Arial", Font.PLAIN, 34));
        es.setHorizontalAlignment(JLabel.RIGHT);
	        
        p0.setPreferredSize(new Dimension (400, 400));
        p0.add(new JLabel(new ImageIcon(ImageIO.read(new File(image.jpg)))));
        p0.add(sz1);
        p0.add(sz2);
        p0.add(sz3);

   p1.setLayout(g1);

        TitledBorder title1;
        title1 = BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "",TitledBorder.CENTER, TitledBorder.ABOVE_TOP);
        TitledBorder title2;
        title2 = BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "",TitledBorder.CENTER, TitledBorder.ABOVE_TOP);
        
        p1.setPreferredSize(new Dimension(500,550));
        
        add(p2 = new JPanel(gl2));
        bg1 = new ButtonGroup();
        p2.setBorder(title1);
        p2.add(jt);
        p2.add(tb = new JToggleButton("<html>text 1<br>Beschreibung 1<br>XYZ</html>")); bg1.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p2.add(tb = new JToggleButton("<html>text 2<br>Beschreibung 2<br>XYZ</html>")); bg1.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p2.add(tb = new JToggleButton("<html>text 3<br>Beschreibung 3<br>XYZ</html>")); bg1.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p2.add(tb = new JToggleButton("<html>text 4<br>Beschreibung 4<br>Xyyz</html>")); bg1.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p2.add(new JLabel());
        p2.add(tb = new JToggleButton("<html>text 5<br>Beschreibung 5<br>Xyyz</html>")); bg1.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p2.add(tb = new JToggleButton("<html>text 6<br>Beschreibung 6<br>XYZ</html>")); bg1.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        
        add(p3 = new JPanel(gl2));
        bg2 = new ButtonGroup();
        p3.setBorder(title2);
        p3.add(zs);
        p3.add(tb = new JToggleButton("<html><table><td>XYZ</td><td>Beschreibung 1 von XYZ, mehr Text</td></table></html>")); bg2.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p3.add(tb = new JToggleButton("<html><table><td>XYZ</td><td>Beschreibung 1 von XYZ, mehr Text</td></table></html>")); bg2.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p3.add(tb = new JToggleButton("<html><table><td>XYZ</td><td>Beschreibung 1 von XYZ, mehr Text</td></table></html>")); bg2.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p3.add(tb = new JToggleButton("<html><table><td>Xyold</td><td>Beschreibung 1 von XYZ, mehr Text</td></table></html>")); bg2.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p3.add(tb = new JToggleButton("<html><table><td>XYZ</td><td>Beschreibung 1 von XYZ, mehr Text</td></table></html>")); bg2.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p3.add(tb = new JToggleButton("<html><table><td>Xolik</td><td>Xolik 5</td></table></html>")); bg2.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        p3.add(tb = new JToggleButton("<html><table><td>XYZ</td><td>Beschreibung 1 von XYZ, mehr Text</td></table></html>")); bg2.add(tb);
        tb.setFont(new Font("Arial", Font.PLAIN, 11));
        
        gl2.setVgap(5);
        gl.setHgap(50);
        
        p1.add(p2);
        p1.add(p3);
        
        pane.add(p0, BorderLayout.NORTH);
        pane.add(p1, BorderLayout.SOUTH);
    }

private static void createAndShowBuild() throws IOException {
        //Create and set up the window.
    	Build frame = new Build("Landtagswahl in Schleswig Holstein");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Set up the content pane.
        frame.build(frame.getContentPane());
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
    
    public static void main(String[] args) throws IOException{
        
                createAndShowBuild();
                
        
    }
}
```

kann mir da jemand helfen?

Danke schonmal


----------



## Verjigorm (5. Mai 2009)

zu 1:

jLabel.setHorizontalAlignment(SwingConstants.RIGHT);


----------



## Ebenius (5. Mai 2009)

schlydi hat gesagt.:


> JToggleButtons mit Text beschriften, der aber, wie in einer Tabelle, zweispaltig, d.h. ähnliche Teile untereinander gleichbündig abschließend sein soll.


Ich bin nicht sicher, ob das Deine Frage beantwortet... Du kannst auch JButtons, JToggleButtons, JCheckBoxes, ... mit HTML befüllen: 
	
	
	
	





```
final JToggleButton toggleButton =
      new JToggleButton("<html><body><table>"
            + "<tr><td>This toggle button</td><td>is styled by</td></tr>"
            + "<tr><td>an HTML</td><td>table</td>"
            + "</table></body></html>");

final JFrame f = new JFrame("Test Frame: HTML styled toggle button");
f.setContentPane(toggleButton);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
```


----------



## schlydi (5. Mai 2009)

Zu Verjinorm: danke, aber 





> jLabel.setHorizontalAlignment(SwingConstants.RIGHT );


 habe ich auch ausproboiert, ist im Prinzip dasselbe wie jLabel.setHorizontalAlignment(JLabel.RIGHT) oder jLabel.setHorizontalAlignment(4), hat alles nicht funktioniert...


----------



## Ebenius (5. Mai 2009)

schlydi hat gesagt.:


> Zu Verjinorm: danke, aber  habe ich auch ausproboiert, ist im Prinzip dasselbe wie jLabel.setHorizontalAlignment(JLabel.RIGHT) oder jLabel.setHorizontalAlignment(4), hat alles nicht funktioniert...


Nur zum Test: Setz mal die Eigenschaften des Labels; opaque:=true background:=Color.RED. Ist wirklich der Inhalt nicht rechtsbündig, oder sitzt nur das gesamte Label an der falschen Stelle?

Ebenius


----------



## schlydi (5. Mai 2009)

Stimmt, soweit war ich dann auch, wenn man meinen Code anschaut, habe ich das versucht, mein Problem ist, daß bei Zeile 82 und 84 die Tabellen halt unterschiedlich aussehen, weil die Texte unterschiedlich lang sind, da ich unterschiedliche Buttons brauche, kann ich nicht alles in eine Tabelle machen und die Größe wie bei HTML einzustellen funktioniert bei Java, soweit ich das probiert habe, nicht.


----------



## Ebenius (5. Mai 2009)

schlydi hat gesagt.:


> Stimmt, soweit war ich dann auch, wenn man meinen Code anschaut, habe ich das versucht,


 Der Code war einfach zu lang. Hab ich nicht bis zum Ende durchgelesen.



schlydi hat gesagt.:


> [...] die Größe wie bei HTML einzustellen funktioniert bei Java, soweit ich das probiert habe, nicht.


So funktioniert es:

```
final JToggleButton toggleButton =
      new JToggleButton(
            "<html><body><table>"
                  + "<tr><td style=\"width:150px;\">This toggle button</td><td>is styled by</td></tr>"
                  + "<tr><td style=\"width:150px;\">an HTML</td><td>table</td>"
                  + "</table></body></html>");

final JFrame f = new JFrame("Test Frame: HTML styled toggle button");
f.setContentPane(toggleButton);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
```
PS: Hast Du meinen letzten Beitrag auch gesehen? Wir haben quasi gleichzeitig geschrieben...

Ebenius


----------



## schlydi (5. Mai 2009)

Ebenius hat gesagt.:


> Nur zum Test: Setz mal die Eigenschaften des Labels; opaque:=true background:=Color.RED. Ist wirklich der Inhalt nicht rechtsbündig, oder sitzt nur das gesamte Label an der falschen Stelle?



Habe ich gemacht, das Label schein richtig zu sitzen, der Inhalt ist linksbündig..


----------



## schlydi (5. Mai 2009)

Hab jetzt das Problem mit der Rechtsbündigkeit auch über HTML gelöst, ist vielleicht nicht ganz elegant, funktioniert aber.


----------



## Ebenius (5. Mai 2009)

schlydi hat gesagt.:


> Habe ich gemacht, das Label schein richtig zu sitzen, der Inhalt ist linksbündig..


Dein Quelltext oben ist mir zu komplex. In diesem Beispiel funktioniert die Ausrichtung richtig: 
	
	
	
	





```
final JToggleButton toggleButton =
      new JToggleButton(
            "<html><body><table>"
                  + "<tr><td style=\"width:150px;\">This toggle button</td><td>is styled by</td></tr>"
                  + "<tr><td style=\"width:150px;\">an HTML</td><td>table</td>"
                  + "</table></body></html>");

final JLabel htmlLabel = new JLabel("<html>ABC</html>");
htmlLabel.setHorizontalAlignment(SwingConstants.RIGHT);

final JPanel contentPane = new JPanel(new GridLayout(0, 1, 6, 6));
contentPane.add(toggleButton);
contentPane.add(htmlLabel);

final JFrame f = new JFrame("Test Frame: HTML styled toggle button");
f.setContentPane(contentPane);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
```
Warum es bei Dir nicht den gewünschten Effekt erzielt, vermag ich nicht zu sagen.

Ebenius


----------

