我想显示一个 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/