3

コンボボックスのスキニングに取り組んでいます。コンボボックスは複数のサブコンポーネントで構成され、そのうちの 1 つがエディターです。
いくつかのカスタム関数を持つカスタム エディターを作成し、カスタム エディターcombobox.setEditor(new CustomComboEditor())の設定に使用しました。以下に示すように、スキン xml ファイルでエディタのスキン タグを定義しました。

style id="skinnedComboTextStyle">
<state value="MOUSE_OVER">
<imagePainter method="textFieldBackground" path="/images/image1.png" sourceInsets="2 2 2 20" />
</state>
<state value="PRESSED">
<imagePainter method="textFieldBackground" path="/images/image2.png" sourceInsets="2 2 2 2" />
</state>
</style>
<bind style="skinnedComboTextStyle" type="name" key="ComboBox.textField" />

コンボ UI シンセの実装はSynthComboBoxUIであり、バインディングがあることに注意してくださいsetName(ComboBox.textField)。したがってComboBox.textField、上記のタグでキーとして使用しています。

カスタム エディターをコンボ エディターとして設定すると、スキンが有効にならないことに気付きました。
しかし、カスタム エディターを使用せず、エディターの既定の実装に依存している場合、スキンは機能しますが、コンボ エディターで意図した機能が有効になりません。

コンボ用のカスタム レンダラーを設定しようとすると、同じ問題に直面します。

4

2 に答える 2

0

Nisha だと思いますが、要件に応じて ComboBoxEditor クラスからも他のメソッドをオーバーライドする必要があります。getItem() も変更する必要があるかもしれません。

于 2012-10-18T14:45:24.620 に答える
0

SynthComboBoxEditor から createEditorComponent() をオーバーライドし、2 つのラベルを持つボタンを作成して、このボタンをエディターとして返すことができます。また、setItem() メソッドをオーバーライドして、これら 2 つのラベルのテキストを個別に設定します。

于 2012-10-18T14:32:16.307 に答える