我想像这样设置一个组合框值
<ComboBox fx:id="dimensionCombo" editable="true" promptText="Other" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="13" GridPane.vgrow="ALWAYS">
<items>
<FXCollections fx:factory="observableArrayList">
<String fx:value="30X20" />
<String fx:value="30X40" />
<String fx:value="30X50" />
<String fx:value="60X40" />
</FXCollections>
</ComboBox>
但是当我dimensionCombo.getValue()
时,我应该为600
获取<String fx:value="30X20" />
,为1200
获取<String fx:value="30X40" />
等不同的值。这可能吗?如果是的话怎么样?
现在我正在做(在控制器中)
...
if(dimensionCombo.getValue().equals("30X20")) {
int value = 600;
}
else if(dimensionCombo.getValue().equals("30X40")) {
int value = 1200;
}
...
有没有更好的方法呢?
答案 0 :(得分:1)
定义一个保存数据的类,例如:
public class Dimension {
private final int width ;
private final int height ;
public Product(
@NamedArg("width") int width,
@NamedArg("height") int height) {
this.width = width ;
this.height = height ;
}
public int getWidth() {
return width ;
}
public int getHeight() {
return height ;
}
public int getArea() {
return width * height ;
}
@Override
public String toString() {
return String.format("%d X %d", width, height);
}
}
@NamedArg
注释允许您在FXML文件中提供构造函数参数,因此在您的FXML中可以执行
<ComboBox fx:id="dimensionCombo" editable="true" promptText="Other" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="13" GridPane.vgrow="ALWAYS">
<items>
<FXCollections fx:factory="observableArrayList">
<Dimension width="30" height="20" />
<Dimension width="30" height="40" />
<Dimension width="30" height="50" />
<Dimension width="60" height="40" />
</FXCollections>
</items>
</ComboBox>
在你的控制器中你可以做到
@FXML
private ComboBox<Dimension> dimensionCombo ;
// ...
int value = dimensionCombo.getValue().getArea();
如果您希望组合框可编辑,则需要提供StringConverter<Dimension>
,以允许组合框根据键入文本字段的值创建新的Dimension
对象。在控制器中,添加
public void initialize() {
dimensionCombo.setConverter(new StringConverter<Dimension>() {
@Override
public String toString(Dimension d) {
return d.toString();
}
@Override
public Dimension fromString(String s) {
String[] factors = s.split("[xX]");
if (factors.length != 2) {
return null ;
}
try {
int w = Integer.parseInt(factors[0].trim());
int h = Integer.parseInt(factors[1].trim());
return new Dimension(w, h);
} catch (NumberFormatException e) {
return null ;
}
}
});
// ...
}