# JComboBox ans Textfield gelangen



## BlubBlub (20. Sep 2011)

Hi,
ich habe ein JFrame. Dem ContentPane des JFrame habe ich ein JPanel hinzugefügt.
Dieses beinhaltet eine JComboBox und ein JButton.
Bei jedem Drücken des Buttons soll sich die Schritfgröße um 10 points erhöhen.
Aus irgendeinem Grund funktioniert das nicht. Was mache ich verkehrt?
Ich habe ein ähnliches Beispiel mit einem JSpinner programmiert. Dort habe
ich mir ebenfalls das Textfield geholt und dessen Font verändert. Da ging es.
Habe ich vielleicht nicht das richtige Textfield geholt?


```
public class MyFrame extends JFrame
{
	private JComboBox comboBox;
	
	public MyFrame()
	{
		super();
		this.setLayout(new FlowLayout());
		this.setSize(500, 400);
		
		Container contentPane = this.getContentPane();
	
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(1,1));
		panel.setPreferredSize(new Dimension(400, 300));
		panel.setBackground(Color.CYAN);
		String[] stringArray = {"element1", "element2", "element3"};
		comboBox = new JComboBox(stringArray);
		panel.add(comboBox);
	    
		JButton button = new JButton("button");
		button.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {	
				ComboBoxEditor editor =  comboBox.getEditor();
			    JTextField textField = (JTextField)editor.getEditorComponent();
				Font font = textField.getFont();
			Font newFont = new Font(font.getFamily(), font.getStyle(), font.getSize()+10);
				textField.setFont(newFont);  
			}});

		
		this.add(panel);
		this.add(button);
		
		this.setVisible(true);
	}
}
```


----------



## BlubBlub (20. Sep 2011)

Ich habe grad rausgefunden, dass nur wenn die JComboBox auf setEditable(true) gesetzt ist, der ComboBoxEditor verwendet wird zur Darstellung der Elemente. Ansonsten wird der ListCellRenderer verwendet. Allerdings weiß ich da grad nicht wie ich die Schriftgröße anpasssen kann.


----------



## BlubBlub (20. Sep 2011)

So ich habe eine kleine Modifikation vorgenommen.
Ich verwende ein JFrame. In das ContentPane des JFrame füge ich ein JPanel hinzu.
Dieses JPanel beinhaltet eine JComboBox.
Die JComboBox hat einen angepassten Renderer bekommen.
Nun habe ich es geschafft, dass die Elemente die man sieht wenn man die ComboBox
aufklappt, die neue Schriftgröße erhalten.
Der Text im Hauptanzeigebereich der JComboBox hat aber seine Standardgröße beibehalten.
Wie schaffe ich es, dass der Text ebenfalls die Größe erhält die die Elemente
in der aufgeklappten Box haben.


```
public class MyFrame extends JFrame
{
	public MyFrame()
	{
		super();
		this.setLayout(new FlowLayout());
		this.setSize(500, 400);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		Container contentPane = this.getContentPane();
	
		JPanel panel = new JPanel();
		panel.setLayout(new GridLayout(1,1));
		panel.setPreferredSize(new Dimension(400, 300));
		
		String[] stringArray = {"element1", "element2", "element3"};
		JComboBox comboBox = new JComboBox(stringArray);
		comboBox.setEditable(false);
		ComboBoxRenderer comboBoxRenderer = new ComboBoxRenderer();
		comboBox.setRenderer(comboBoxRenderer);
		
		panel.add(comboBox);
		contentPane.add(panel);
		
		this.setVisible(true);
	}
}
```


```
class ComboBoxRenderer extends JLabel implements ListCellRenderer 
{	
    public ComboBoxRenderer()
    {
        setOpaque(true);
        setHorizontalAlignment(CENTER);
        setVerticalAlignment(CENTER);
    }

    
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {    	
        String selectedValue = (String)value;
        this.setText(selectedValue);
        
        if (isSelected) 
        {
            setBackground(list.getSelectionBackground());
            setForeground(list.getSelectionForeground());
        } 
        else
        {
            setBackground(list.getBackground());
            setForeground(list.getForeground());
        }
        
        Font font = list.getFont();
        Font newFont = new Font(font.getFamily(), font.getStyle(), font.getSize()+50);
        this.setFont(newFont);
        
        return this;
    }
}
```


----------



## hdi (20. Sep 2011)

> Wie schaffe ich es, dass der Text ebenfalls die Größe erhält die die Elemente
> in der aufgeklappten Box haben.



Schonmal direkt über JComboBox#setFont() versucht?

Übrigens: Für das Übernehmen einer bestehenden Schritfart mit Abänderung gibt es die Methode deriveFont:


```
// Font newFont = new Font(font.getFamily(), font.getStyle(), font.getSize()+50);
Font newFont = font.deriveFont(font.getSize() + 50f);
```

Sie ist überladen, es gibt noch eine Version mit 2 Parametern, mittels der du auch den Style anpassen kannst.


----------



## BlubBlub (21. Sep 2011)

Ja klappt wunderbar danke


----------

