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"ます。アライメント状態を他の方法で保存する必要がある場合は、古いバージョンの Java でint使用されている列挙型を使用します。switch

于 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))

Java 6 と 7 の間で JComboBox が変更されたことに注意してください。Java 7 ライブラリでは、JComboBox は汎用であるため、このようなカスタム オブジェクトを内部に格納し、後でそれらの値を取得することが容易になります。Java 6 では、選択した値にアクセスするときにキャストを使用する必要があります。

于 2012-08-22T08:42:10.820 に答える