0

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

When a specific item in the list is selected, I want to display the JLabels 'one' or 'two'. 例如,选择选项一显示“一”,选择选项二显示“二”并从显示中删除“一”,反之亦然。

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

我在网上搜索并查看了 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 
                }   
            }        
        );
    }
}
4

3 回答 3

1

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

于 2013-07-25T19:27:06.253 回答
1

您可以使用:

event.getItem()

获得一个Object代表当前选择的项目。该对象实际上是 a String,因为组合框是使用 s 数组创建String的。

于 2013-07-25T19:27:43.500 回答
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 中。

于 2013-07-25T19:30:15.017 回答