0

私は一見単純な問題を抱えています:

水平フィールドマネージャーを使用して、1行に7つのチェックボックス(曜日)を並べて作成したいと思います。残念ながら、CheckboxFieldは、デフォルトでは、行全体を占めます。このため、CheckboxFieldは(およびjavadocによると)必要な幅のみを使用するようにするスタイル設定を持っている必要があります。ただし、私のコンパイラ(Eclipseプラグイン)は「CheckboxField.NO_USE_ALL_WIDTH」を認識せず、アプリをコンパイル/パッケージ化しません。

CheckboxFieldのデクレレーション:

private CheckboxField   cf_sun,
                        cf_mon,
                        cf_tue,
                        cf_wed,
                        cf_thu,
                        cf_fri,
                        cf_sat;

チェックボックスを次のように定義しました。

cf_sun = new CheckboxField("Sun", false, CheckboxField.NO_USE_ALL_WIDTH); // <-- ERROR
        cf_mon = new CheckboxField("Mon", false);
        cf_tue = new CheckboxField("Tue", false);
        cf_wed = new CheckboxField("Wed", false);
        cf_thu = new CheckboxField("Thu", false);
        cf_fri = new CheckboxField("Fri", false);
        cf_sat = new CheckboxField("Sat", false);

どうすればこれを機能させることができますか?

4

1 に答える 1

3

CheckboxField の BlackBerry Javadocs によると:

NO_USE_ALL_WIDTH

public static final long NO_USE_ALL_WIDTH

このスタイルを使用して、フィールドが必要なだけの水平方向のスペースのみを使用する必要があることを示します。

関連項目: 定数フィールド値

以降: BlackBerry API 7.0.0

SDK 7.0ライブラリに対してアプリをビルドしていますか? それとももっと低いもの?7.0 より前のバージョンを使用すると、コンパイラは (当然のことながら) その新しい定数を見つけられません。

とにかく、私はあなたのコードをOS 5.0で試してみCheckboxFieldましHorizontalFieldManager. しかし、フィールド幅をさらに制御する必要があるとしましょう...

幸いなことに、かなりシンプルなレイアウトになっているようです。すべてのフィールド ラベルは同じ長さ (3 文字) であるため、おそらく幅を設定する新しいサブクラスを作成できます。より動的にしたい場合はFont.getAdvance()、チェックボックスのラベルで を使用して、各ラベルの幅を正確に決定し、したがって、各フィールドに必要なスペースを正確に決定できます (もちろん、チェックボックスの幅も考慮します)。 )。

private class MyCheckboxField extends CheckboxField {

  public MyCheckboxField(String label, boolean value) {
     super(label, value);
  }

  public int getPreferredWidth() {
     // 32 is just a constant to account for the checkbox itself ... 
     // ... make this whatever you like
     return getFont().getAdvance(getLabel()) + 32;
  }

  protected void layout(int width, int height) {
     super.layout(getPreferredWidth(), height);
     setExtent(getPreferredWidth(), getPreferredHeight());
  }

}

その後

cf_mon = new MyCheckboxField("Mon", false);
于 2012-11-10T04:59:48.083 に答える