区分JComboBox中的选定项目

时间:2013-07-25 19:22:41

标签: java swing jframe jcombobox itemlistener

正如您在下面所看到的,我创建了一个JComboBox,其中的元素包含在'选项中。 array作为列表​​中的选项。

当选择列表中的特定项目时,我想显示JLabels' one'或者'两个'。 例如。选择选项一显示一个'并选择选项二显示'两个'并删除一个'从显示器,反之亦然。

我知道如何使用add()添加JLabel;但我不知道如何区分选择哪个项目。

我在线搜索并查看了java文档,但我找不到相关的解决方案。

由于

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.lang.*;
import java.util.*;

public class converterPage extends JFrame {
    private JComboBox box;
    private static String[] options = {"Option one", "Option two"};
    private JLabel one, two;

    public converterPage() {
        super("Convert Units"); 
        setLayout (null);

        box = new JComboBox(options);
        box.setBounds(10, 10, 150, 30);
        add(box);

        one = new JLabel("one");
        two = new JLabel("two");
        one.setBounds(170, 10, 150, 30);
        two.setBounds(170, 10, 150, 30);


        box.addItemListener(
            new ItemListener(){ 
                public void itemStateChanged(ItemEvent event){
                    // depending on what is selected, i want to only display certain stuff 
                }   
            }        
        );
    }
}

3 个答案:

答案 0 :(得分:1)

一种方法是使用:JComboBox#getSelectedItem()

答案 1 :(得分:1)

您可以使用:

event.getItem()

获取表示当前所选项目的Object。该对象实际上是String,因为组合框是使用String s的数组创建的。

答案 2 :(得分:0)

我相信这就是你所追求的:

import java.awt.event.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;

public class ConverterPage extends JFrame
{
    private JComboBox box;
    private final Map<String, JLabel> map = new HashMap<>();

    public ConverterPage()
    {
        super("Convert Units");
        super.setLayout(null);

        final JLabel one = new JLabel("one");
        final JLabel two = new JLabel("two");
        one.setBounds(170, 10, 150, 30);
        two.setBounds(170, 10, 150, 30);

        this.map.put("Option one", one);
        this.map.put("Option two", two);
        this.box = new JComboBox(this.map.keySet().toArray(new String[this.map.size()]));
        this.box.setBounds(10, 10, 150, 30);
        super.add(box);

        this.box.addItemListener(new ItemListener()
        {
            @Override
            public void itemStateChanged(ItemEvent event)
            {
                // depending on what is selected, i want to only display certain stuff 
                final JLabel label = map.get((String) event.getItemSelectable().getSelectedObjects()[0]);
                System.out.println(label.getText());
            }
        });
    }

    public static void main(String[] args)
    {
        final ConverterPage c = new ConverterPage();
        c.setSize(400, 400);
        c.setVisible(true);
    }
}

我冒昧地清理你的导入(你永远不需要从java.lang导入它,因为它是自动导入的),类名应该在CapitalCase中。