Dropdown meue während der Laufzeit ändern.

Joew0815

Bekanntes Mitglied
Hallo Zusammen,

ich möchte gerne den Inhalt eines Dropdown-menü während der Laufzeit ändern.

Und zwar, ich habe zwei dropdown menüs. Wenn in dem 1. etwas auswähle rufe ich einen Event-handler au,f der dann das zweite dropdown ändern soll. je nachdem was ich im 1. ausgewählt habe.

Das Problem ich weiß einfach nicht wie ich den Inhalt des 2. dropdown ändern kann. Würde gerne ein String array jedes mal neu in das 2. dropdown schreiben. Jemand eine Idee???

Grüße
 
Was für ein Framework ist das mit der du Dropdown-Listen hast: AWT, Swing, JavaFX - oder - JavaEE ...?
 
Benutzte Eclipse IDE for Java Developers. Und die Combobox ist swing.JComboBox und der Event-handler ist awt.event.KeyEvent.
Meinst du das?
 
Ich wollte wissen mit was du arbeitest: Also Swing.

Du kannst das auch mit einem ActionListener lösen, aber ItemListener ist wesentlich schöner IMHO und du kannst auch zusätzlich überprüfen, ob die letzte Selektion die gleiche ist (das vermeidet unnötiges Laden).

Java:
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.util.stream.IntStream;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

  public static void main(String[] args) {
    new Test();
  }

  public Test() {
    JFrame frame = new JFrame("Dropdown");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationByPlatform(true);

    JPanel mainPanel = new JPanel(new GridLayout(2, 1, 5, 5));
    JComboBox<String> box1 = new JComboBox<>(new String[]{"Numbers", "Alphabet"});
    box1.setSelectedIndex(-1);
    DefaultComboBoxModel<String> box2Model = new DefaultComboBoxModel<>();
    JComboBox<String> box2 = new JComboBox<>(box2Model);

    box1.addItemListener(e -> {
      if (e.getStateChange() == ItemEvent.SELECTED) {
        if (e.getItem() instanceof String) {
          box2Model.removeAllElements();
          switch ((String) e.getItem()) {
            case "Numbers":
              IntStream.range(0, 26).mapToObj(i -> String.valueOf(i)).forEach(box2Model::addElement);
              break;
            case "Alphabet":
              IntStream.range(0, 26).mapToObj(i -> String.valueOf((char) ('A' + i))).forEach(box2Model::addElement);
              break;
          }
        }
      }
    });
    mainPanel.add(box1);
    mainPanel.add(box2);

    frame.add(mainPanel);
    frame.pack();
    frame.setVisible(true);
  }
}
 
Hier mal der Code von Flown in 1.6 freundlich (falls nicht korrekt, bitte korrigieren):

Java:
public Test()
{
	JFrame frame = new JFrame("Dropdown");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setLocationByPlatform(true);
	
	JPanel mainPanel = new JPanel(new GridLayout(2, 1, 5, 5));
	JComboBox<String> box1 = new JComboBox<String>(new String[]{"Numbers", "Alphabet"});
	box1.setSelectedIndex(-1);
	final DefaultComboBoxModel<String> box2Model = new DefaultComboBoxModel<String>();
	JComboBox<String> box2 = new JComboBox<String>(box2Model);
	
	box1.addItemListener(new ItemListener() {
		
		@Override
		public void itemStateChanged(ItemEvent e)
		{
			if (e.getStateChange() == ItemEvent.SELECTED)
			{
				if (e.getItem() instanceof String)
				{
					box2Model.removeAllElements();
					
					String item = (String)e.getItem();
					if(item.equals("Numbers"))
					{
						for(int i = 0; i < 26; i++)
						{
							box2Model.addElement(String.valueOf(i));
						}
						
						return;
					}
					
					if(item.equals("Alphabet"))
					{
						for(int i = 0; i < 26; i++)
						{
							box2Model.addElement(String.valueOf((char)('A' + i)));
						}
						
						return;
					}
				}
			}
		}
	});
	
	mainPanel.add(box1);
	mainPanel.add(box2);
	
	frame.add(mainPanel);
	frame.pack();
	frame.setVisible(true);
}
 
Es hat funktioniert!! 🙂
Habe das "DefaultComboBoxModel" und den "addItemListener" meiner GUI hinzugefügt und es hat funktioniert 🙂)

Vielen Dank! X5-599.
 

Neue Themen


Zurück
Oben