2012-09-12 10 views
6

私はWPFとJavaFX 2.0を初めて経験しています。 私は、SilverlightプロジェクトをJavaFX 2.0に移行しようとしています。 2つのApressの本といくつかのスレッドが私の質問に答えることができませんでした(多分私はWPFに影響を受けたために答えを見たり理解しなかったかもしれません)。JavaFX 2.0スタイル/テンプレートの既存のコントロール

私が必要とするのは、RadioButtonの機能を持つコントロールですが、全く異なるUIです。 My RadioButtonにはテキスト、画像、ボタンなし、テキストの下にある線(四角形)があります。 ラジオボタンが選択されていない場合、テキストとイメージは透明で、イメージはグレースケールで、矩形は表示されません。 これを選択すると、テキストとイメージが不透明になり、イメージが色付きで、矩形が表示されます(アニメーションですべて変更)。

私は既存のJavaFX 2.0コントロールをスキンする方法を知っていますが、この方法でRadioButtonをスタイル/スキンする方法はわかりません。

WPFでは、私のRadioButtonスタイル用の新しいテンプレートを作成します...私が言及したように、おそらくこれらのWPFがJavaFX 2.0に期待していたことは私のハードルです。

おかげで...

編集:既存のコントロールのために別のテンプレートを作成することはできませんように

はそう(?): JavaFX 2.0 render controls inside control

だから何を実装するための最良の方法となります私のRadioButton? ToggleGroupについて気になっています...

+0

選択した状態と選択していない状態の画像を挿入できますか? – jewelsea

+0

イメージは透明で、選択されていない場合はグレースケールになるため、可能ですが必須ではありません。 – thinkU

+0

混乱して申し訳ありませんが、私はボタンの状態が質問のように見えるようにするためのイメージを配置し、あなたのケースをより直接的に解決する答えを策定するのが簡単であることを意味しました。 – jewelsea

答えて

5

スタイルやテンプレートのJavaFXコントロールには、さまざまなアプローチがあります。

  1. 事前構築されたJavaFXコントロールは、cssでスタイル変更可能です。

  2. 事前構築されたJavaFXコントロールは、機能と外観を変更するためにサブクラス化することもできます。 exampleはIntFieldで、整数だけを編集するようにカスタマイズされたTextFieldを作成します。

  3. 多くの場合、既存のコントロールの束をレイアウトPaneまたはGroupにまとめてカスタムコンポーネントを作成することができます。アマルガムのコンポーネントを構築する方法やクラスをパラメータ化することで、効果的にコードをカスタムコンポーネントの構造をテンプレートすることができます。このようなメソッドを使って構築された(そしてCSSを使ってスタイル可能な)digital and analogue clock componentsの例を以下に示します。

  4. introduction to fxml documentのアプローチを使用して、さまざまなfxmlファイルを使用してカスタムコンポーネントのレイアウトを管理することもできます。 fxmlは、velocityのようなテンプレート言語を使用して生成することもできますし、異なるレイアウト用にいくつかの異なる静的fxmlファイルを作成することもできます。静的または生成されたfxmlは、必要に応じて動的に生成されるhtmlサイトのように、Webサーバーから動的に提供することもできます。カスタムコントロールを構築することができ

  5. もう一つの方法は、JavaFXのチームが(コントロールのためのスキンと行動のクラスを作成することによって)それをしないのと同じ方法です。 JavaFXの2.2(そしておそらく将来JavaFXのバージョンで)のように、これは、このようなjfxtrasやJavaFXのプロジェクトのopen source control repositoryに直接貢献に取り組んでいるようなライブラリクリエイターのための最も適切です。

 
    .radio-button { 
     -fx-skin: "com.sun.javafx.scene.control.skin.RadioButtonSkin"; 
    } 

ので、一つの方法は、カスタマイズするためのラジオボタンのように見える。また

  • は、例えばラジオボタンは、次のCSSをしている、CSSに、あなたがコントロール用のスキンクラスを指定することができ、ことに注意してください

    1. 先ほどリンクしたオープンソースのJavaFXリポジトリからRadioButtonSkinクラスソースのコピーを入手してください。
    2. 新しいクラス名(LinedRadioButtonSkinなど)にコピーします。
    3. 希望する外観になるように変更します。
    4. プロジェクト用のカスタムCSSスタイルシートを作成します。
    5. カスタムCSSスタイルシートで、.radio-buttonクラスの-fx-skin属性に新しいLinedRadioButtonSkinクラスを使用するように設定しました。限り、あなたの新しいスキンは、その後、あなたは自動的に既存のラジオのように新しいスキンベースのラジオボタンに同じ動作を取得する必要があり、正しく実装されており、既存のRadioButtonSkinクラスがどのように機能するかに似た既存のButtonBehaviourクラスまで配線されているよう

    ボタン。たとえば、ボタンはマウスのクリック、キーボードアクセラレータ、タッチイベント、ToggleGroupsとのやり取り、既存のRadioButtonSkinとまったく同じように反応し、既存のRadioButton APIを使用してアクセスできます。つまり、ボタンはRadioButtonの感触(ビヘイビア)を保持しますが、さまざまな内部コンポーネント、レイアウト、CSSスタイリングを使用することで全く異なることがあります。

    カスタムスキンルートに移動し、このプロセスの助けが必要な場合は、jfxtrasチームのメンバーに連絡し、新しいスキンをjfxtrasプロジェクトに寄付することを検討してください。

    警告

    のJavaFX 2.2の皮膚と行動クラスではなく、公的サポートされているAPIのプライベート実装のAPIであり、彼らはJavaFXのの次のメジャーリリースを予定して公開API(に移行して、将来的に変更されます - JavaFX/JDK 8) - 今日はこれらを使用する場合は注意してください。パブリックAPIに移行すると、これらのクラスを使用して独自のコントロールを作成する方法に関する詳細とチュートリアルが表示されることが期待されます。

    パッケージ名とapiメソッドは、内部プライベート実装からパブリックAPIへのスキンと動作遷移から独自のコントロールを構築するためにAPIとして変更されます。たとえばcom.sun.javafx.scene.control.behavior.BehaviorBasejavafx.scene.control.behavior.Behaviorになる可能性があります。したがって、BehaviorBaseを拡張するクラスを作成すると、クラスのソースを変更して新しい名前とapiを参照して再コンパイルするまで、新しいバージョンのJavaFXに対しては実行されません。

    同じ理由から、プライベートAPIに対して書かれた本のサンプルコードはapiが作成されるとすぐに期限切れになるため、APIが公開で最終的になるまで、このトピックに関する良い本はありませんパブリックAPIに対してコンパイルしたり、新しいバージョンのJavaFXに対して実行したりすることはありません。

  • +0

    ありがとう、Jewelsea!私が望んでいたすべての情報と2冊の本に欠けていました。 (6)私が使った "WPFテンプレート"のような感じです。私は(5)と(6)を試してみる...すでに興奮している。 P.S .:良い本を提案できますか? P.P.S:専用APIを慎重に使用する理由を理解できません。 – thinkU

    +0

    あなたの質問に答えるための警告情報が更新されました。 – jewelsea

    関連する問題