# JComboBox mit JButtons befüllen



## Craven (25. Jan 2006)

Hallo!

Ich möchte eine JComboBox mit Buttons befüllen. Grund ist der, daß der Anwender auswählen können soll, welche Aktion er ausführen möchte (Suchen, Suche speichern).

Folgender Code funktioniert nicht und ich hoffe jemand kann mich auf die richtige Fährte führen


```
private JComboBox getJComboBox() {
    if (jComboBox == null) {
      jComboBox = new JComboBox();
      jComboBox.add(new JButton("Suchen"));
      jComboBox.add(new JButton("Suche speichern"));
    }
    return jComboBox;
  }
```


----------



## Sky (25. Jan 2006)

Warum brauchst Du Buttons in der ComboBox ?

Die Auswahl führt zu einem Event. Du kannst gucken, was ausgewählt wurde und entsprechend deine Suche o.ä. ausführen.


----------



## Craven (25. Jan 2006)

Wieso soll der Anwender etwas auswählen, wenn bereits das richtige dargestellt wird. Das DropDown der JComboBox soll sich erst beim Klick auf den Pfeil öffnen.

Bsp:

Es wird "Suchen" angezeigt.
Der Benutzer will suchen.
Er klickt auf "Suchen".
Es soll nicht das DropDown der JComboBox aufgehen, es soll nur gesucht werden.


----------



## The_S (25. Jan 2006)

1. Beim das Event der ComboBox abfangen, sobald gewechselt wurde
2. Falls es nötig ist die Aktion nochmal verändert auszuführen, knall einfach n Button neben die ComboBox der die gewählte Aktion einfach nochmal ausführt


----------



## Sky (25. Jan 2006)

Sorry, verstehe jetzt gar nicht mehr was Du meinst:

Wenn der Dialog Suchen angezeigt wird soll in der Combo "Suchen" oder wie ? (entsprechend bei anderen Dialogen anderen Anzeigen !?)


----------



## The_S (25. Jan 2006)

@ sky, musste es auch erst einige male lesen bis ich es gecheckt hab

mal davon ausgegangen, dass ich es auch richtig verstanden hab


----------



## Craven (25. Jan 2006)

Nu gut, werd ich wohl doch was selber basteln müssen.


----------



## The_S (25. Jan 2006)

Craven hat gesagt.:
			
		

> Nu gut, werd ich wohl doch was selber basteln müssen.



???

Warum das denn? Oder passt dir meine Lösung nicht?


----------



## Craven (25. Jan 2006)

Hier schon fast die Lösung die ich gesucht hab, muß ich nur noch verfeinern.

```
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import javax.swing.plaf.basic.BasicComboBoxEditor;
 
public class ComboBoxRendererDemo extends JPanel
{
    /**
   * 
   */
  private static final long serialVersionUID = 1L;

    static class ButtonComboBoxRenderer implements ListCellRenderer
    {
        public Component
            getListCellRendererComponent (JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
        {
            final JButton button = new JButton (value.toString());
            final Object valueCopy = value;
 
            button.addActionListener (new ActionListener()
                {
                    public void actionPerformed (ActionEvent ae)
                    {
                        JOptionPane.showMessageDialog((Component) ae.getSource(), "You chose \"" + valueCopy + "\"!");
                    }
                });
 
            return button;
        }
    }
 
    static class ButtonComboBoxEditor extends BasicComboBoxEditor implements ActionListener
    {
        JButton selectedButton = new JButton();
        ActionListener currentActionListener;
 
        public Object getItem()
        {
            return selectedButton;
        }
 
        public void setItem (Object o)
        {
            final String text = o.toString();
            selectedButton.setText (text);
 
            if (currentActionListener != null)
                selectedButton.removeActionListener (currentActionListener);
 
            currentActionListener = new ActionListener()
                {
                    public void actionPerformed (ActionEvent ae)
                    {
                        JOptionPane.showMessageDialog((Component) ae.getSource(), "You chose \"" + text + "\"!");
                    }
                };
 
            selectedButton.addActionListener (currentActionListener);
        }
 
        public Component getEditorComponent()
        {
            return selectedButton;
        }
 
        public void actionPerformed (ActionEvent ae)
        {
            currentActionListener.actionPerformed (ae);
        }
    }
 
    public static void main (String arg[])
    {
        JFrame mainFrame = new JFrame ("Combo Box With Buttons");
        JComboBox comboBox = new JComboBox (arg);
        ButtonComboBoxEditor editor = new ButtonComboBoxEditor();
 
        comboBox.setRenderer (new ButtonComboBoxRenderer());
        comboBox.setEditor (editor);
        comboBox.setEditable (true);
        comboBox.addActionListener (editor);
 
        mainFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        mainFrame.getContentPane().add (comboBox);
        mainFrame.show();
    }
}
```


----------

