コンボボックスのスキニングに取り組んでいます。コンボボックスは複数のサブコンポーネントで構成され、そのうちの 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
、上記のタグでキーとして使用しています。
カスタム エディターをコンボ エディターとして設定すると、スキンが有効にならないことに気付きました。
しかし、カスタム エディターを使用せず、エディターの既定の実装に依存している場合、スキンは機能しますが、コンボ エディターで意図した機能が有効になりません。
コンボ用のカスタム レンダラーを設定しようとすると、同じ問題に直面します。