java - JComboBox - 如何呈现时间值的名称

标签 java swing jcombobox

我想显示一个 JComboBox,它显示文本值但存储实际的 int 值,供用户选择 session 超时值。

private static final String[] SESSION_TIMEOUT_OPTION_NAMES = new String[]{
    "5 Minutes", 
    "10 Minutes", 
    "15 Minutes", 
    ...
};

private static final Integer[] SESSION_TIMEOUT_OPTION_VALUES = new Integer[]{
    TimeConstants.FIVE_MINUTES, 
    TimeConstants.TEN_MINUTES, 
    TimeConstants.FIFTEEN_MINUTES, 
    ...
};

我知道这可以用 ListCellRenderer 来完成,但我能看到它工作的唯一方法是使用大映射基本上是这样的:

sessionTimeoutJComboBox.setRenderer(new ListCellRenderer<Integer>()
{
    private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

    @Override
    public Component getListCellRendererComponent(...)
    {
        JLabel jlabel = (JLabel)defaultRenderer.getListCellRendererComponent(...);

        for(int x=0; x<SESSION_TIMEOUT_OPTION_VALUES.length; x++)
        {
            if(SESSION_TIMEOUT_OPTION_VALUES[x] == value)
            {
                jlabel.setText(SESSION_TIMEOUT_OPTION_NAMES[x]);
                return jlabel;
            }
        }

        throw new RuntimeException("Invalid mapping");
    }
});

有更好的方法吗?

顺便说一句,我想这样做的原因是这样我就可以做到

(int)sessionTimeoutJComboBox.getSelectedItem();

而且不必关心更多。

最佳答案

你可以使用枚举:

private enum TimeConstants {
    FIVE_MINUTES("5 Minutes", 5),
    TEN_MINUTES("10 Minutes", 10);

    private final String text;
    private final int value;

    private TimeConstants( String text, int value ) {
        this.text = text;
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }

    @Override
    public String toString() {
        return this.text;
    }
}

下面是如何将它们与 JComboBox 一起使用:

TimeConstants[] constants = {TimeConstants.FIVE_MINUTES, TimeConstants.TEN_MINUTES};
JComboBox<TimeConstants> combo = new JComboBox<TimeConstants>(constants);
System.out.println( "Selected value: " + ((TimeConstants)combo.getSelectedItem()).getValue());

关于java - JComboBox - 如何呈现时间值的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24706717/

相关文章:

java - com.sun.proxy.$Proxy219 无法使用 Java Config 进行转换,但它可以与 xml 一起正常工作

java - 如何从 JFrame 中删除 JscrollPane?

java - 禁用遍历键时如何将焦点转移到自定义组件?

java - 设置 JComboBox 的背景?

java - 如何通过 Eclipse 运行 playframework FunctionalTest?

java - Spring-ws XML 炸弹保护,有人知道吗?

java - 在Scala中使用泛型实现Java接口(interface),并返回null

java - JFrame 关闭问题

java - 无法在 JPanel 上绘图

java - 无法使 JComboBox 更新 JFrame