Layout JRadioButton

JabberTag

Grünschnabel
Hi Leute,

der normale JRadioButton erzeugt ja einen Button mit einem dazugehörigen Label, welches sich rechts vom Button befindet.
Ich möchte nun jedoch, dass sich das Label oberhalb des Buttons befindet und der Button darunter zentriert dargestellt wird.
Ich habe das nochmals in den beiden Bildern dargestellt.

Gibt es dafür ein Setting, das ich ändern kann oder welche Methoden muss ich überschreiben, um das gewünschte Resultat zu erhalten?

Beste Grüße und vielen Dank bereits im voraus
JabberTag
 

Anhänge

  • alt.gif
    alt.gif
    1,1 KB · Aufrufe: 62
  • neu.gif
    neu.gif
    1,1 KB · Aufrufe: 62
Ich hab nichts zu der Layoutveränderung gefunden. Kannst du nicht einfach ein JLabel zentriet drüber setzen? Dann benutzt du eben den default-Konstruktor vom JRadioButton ohne String.
 
Wenn du Unbedingt es so haben willst, kannst du deine eigene Kontroll-Strukturen erstellen.(Klasse JComponent Vererben, dann selbs Zeichnen etc)
was aber viel arbeit macht und am Ende wahrscheins nicht in das Design der Swing Componenten passt.
 
Danke für Eure Antworten!

Falls ich einfach ein RadioButton ohne Label erzeuge und das Label manuell dazu erstelle, stellt sich gleich folgende Frage.
Wie kann ich erreichen, dass bei einem Klickauf das manuell erstellte Label auch der RadioButton gesetzt wird, wie es im anderen Fall ist. Label.setLabelfor(component) macht es leider nicht.

Aber trotzdem noch mal die grundsächliche Frage, irgendwo in irgendeiner Methode muss doch hinterlegt sein, wie der RadioButton zu zeichnen ist im Bezug auf das dazugehörige TextLabel. Aber wo?

Danke nochmals!
JabberTag
 
Die einfachste Lösung ist wohl sich ein eigenes Steuerelement zu erstellen in dem du ein JLabel zentral über einen Radiobutton ohne Label setzt. Am besten wäre wohl du erbst einfach von JPanel. Um auch bei nem Klick auf das Label zu reagieren sollte doch eigentlich ein MouseListener auf das Label ausreichend, in dem du dann einfach die selektierung des Radiobuttons änderst.

Gruß
sony2
 
Zuletzt bearbeitet:
Also ich hab gerade aus Langeweile mal was zusammenprogrammiert, sollte genau das sein was du wolltest.Ist genauso zu benutzen wie jedes andere Swing-Element.

JMyRadioButton
Java:
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ButtonModel;
import javax.swing.JLabel;
import javax.swing.AbstractButton;
import javax.swing.JRadioButton;

public class JMyRadioButton extends AbstractButton
{	
	private JRadioButton rButton;
	private JLabel label;
	
	public JMyRadioButton(String text)
	{
		super();
		this.setLayout(new GridLayout(2, 1));
		this.add(label = new JLabel(text));
		this.add(rButton = new JRadioButton());
		this.setModel(rButton.getModel());
		
		label.setHorizontalAlignment(JLabel.CENTER);
		rButton.setHorizontalAlignment(JRadioButton.CENTER);
		
		label.addMouseListener(new MouseListener(){

			public void mouseClicked(MouseEvent e)
			{
				if(rButton.isSelected())
				{
					rButton.setSelected(false);
				}
				else
				{
					rButton.setSelected(true);
				}
				
			}

			public void mouseEntered(MouseEvent e)
			{
				// TODO Auto-generated method stub
				
			}

			public void mouseExited(MouseEvent e)
			{
				// TODO Auto-generated method stub
				
			}

			public void mousePressed(MouseEvent e)
			{
				// TODO Auto-generated method stub
				
			}

			public void mouseReleased(MouseEvent e)
			{
				// TODO Auto-generated method stub
				
			}
			
		});
	}
	
	public boolean isSelected()
	{
		return rButton.isSelected();
	}
}

... und hier noch ein passendes Anwendungsbeispiel ...

JMyRadioButtonTest:

Java:
import java.awt.FlowLayout;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;

public class JMyRadioButtonTest extends JFrame
{	
	JMyRadioButton r1;
	JMyRadioButton r2;
	
	public JMyRadioButtonTest()
	{	
		ButtonGroup bGroup = new ButtonGroup();
		this.setLayout(new FlowLayout());
		
		this.add(r1 = new JMyRadioButton("Test1"));
		this.add(r2 = new JMyRadioButton("Test2"));
		
		bGroup.add(r1);
		bGroup.add(r2);
		
		this.pack();
	}
	
	public static void main(String args[])
	{
		new JMyRadioButtonTest().setVisible(true);
	}
}

... hoffe das hilft dir weiter

Gruß
sony2
 
Zurück