0

我有一个只接受字符串的方法。

public void setVerticalAlignment(String align) {
            ...
    gd.verticalAlignment = align;   // accepts only int.
            ...
}

gd.verticalAlignment只接受一个int。通常这是由gd.verticalAlignment = SWT.TOPSWT.TOP 是静态 int 之类的东西设置的。

是否可以使用类似的方法调用此方法setVerticalAlignment("SWT.TOP")

4

4 回答 4

4

如果你使用 Java 7,你总是可以switch在字符串上使用:

switch (align) {
    case "SWT.TOP":
        gd.verticalAlignment = SWT.TOP;
    /* etc */
}

老实说,我会避免使用像"STW.TOP". 如果我真的不得不以其他方式存储对齐状态,而不仅仅是int我会使用可能switch在旧版本 Java 中使用的枚举。

于 2012-08-22T08:26:39.297 回答
2

听起来你想要一张地图:

// Ideally use ImmutableMap from Guava
private static final Map<String, Integer> ALIGNMENTS = mapAlignments();

private static final Map<String, Integer> mapAlignments() {
    Map<String, Integer> ret = new HashMap<String, Integer>();
    ret.put ("SWT.TOP", SWT.TOP);
    // etc
    return ret;
}

然后您可以稍后从地图中获取(并取消装箱)。

或者,更好的是,首先更改您的方法声明以避免这种情况:)

于 2012-08-22T08:29:04.493 回答
0
Integer.parseInt(String)

如果字符串未指定为整数值,则可以抛出NumberFormatException 。同样在 Java 的先前版本中,您不能在字符串上应用 switch-case。所以更好的是你可以使用以下内容:

if(("SWT.TOP").equals(align))
{
     gd.verticalAlignment = SWT.TOP;
}
于 2012-08-22T08:33:39.013 回答
0

为什么要使用文本字段?对齐方式只有几个合法的选择,因此您应该真正使用JComboBox之类的东西。您可以将自定义对象存储在 JComboBox 中,以便它们显示命名常量但也存储整数常量:

public class SwingAlignOption {
  public final String name;
  public final int value;
  public SwingAlignOption(String name, int value) {
    this.name = name;
    this.value = value;
  }
  public String toString() { return name; }
}

然后,您可以将实例添加到组合框中,例如comboBox.addItem(new SwingAlignOption("TOP", SWT.TOP)).

请注意,JComboBox 在 Java 6 和 7 之间发生了变化。在 Java 7 库中,JComboBox 是通用的,这使得在内部存储这样的自定义对象并在以后检索它们的值变得更加容易。在 Java 6 中,当您访问选定的值时,您必须使用强制转换。

于 2012-08-22T08:42:10.820 回答