カスタムテキスト編集コンポーネントを作成したい。基本的に、キャレットを設定し、カスタムの方法で重要なイベントを処理する機能を備えたテキストが必要です。JavaFXでこれを行う方法はありますか?Textには実装固有のメソッドがあります(非推奨であり、コメントではプライベートと見なす必要があると言われています)が、私はそれらを使用できません。
JavaFXでそうすることは可能ですか?
TextFieldまたはTextAreaを使用する場合、これらは両方ともTextInputControlのサブクラスです。TextInputControlは、caretの位置を読み取って変更するために使用できるcaretPositionPropertyを提供します。すべてのシーングラフオブジェクト(TextFieldとTextAreaを含む)はNodeのインスタンスです。ノードを使用すると、カスタムEventHandlerとイベントフィルターを設定できます。イベントハンドラーを使用して、TextInputControlsのデフォルトのキー処理ハンドラーをオーバーライドして、独自の処理を実装できます。
TextFieldまたはTextAreaインスタンスのカスタマイズでは得られないさらなるカスタマイズ機能が必要な場合は、独自のTextInputControlサブクラスを作成し、必要に応じてカスタムテキスト編集コンポーネントを実装できますが、複雑さのため、そのアプローチはお勧めしません。また、最終的に必要になる可能性のある内部JavaFXAPIへの依存関係が必要になる可能性があります。
TextFieldは、次の理由で機能しません。1.フォーカスを示し、削除する方法がわからない境界線があります。
これは、JavaFX2.2のデフォルトのcaspian.cssスタイルシートへのリンクです。TextFieldのスタイルを設定して、フォーカスの境界線を削除するには、:focused疑似クラスセレクタースタイルをデフォルトのセレクターと同じ値に設定します。例えば:
.text-field:focused {
-fx-background-color: -fx-shadow-highlight-color, -fx-text-box-border, -fx-control-inner-background;
-fx-background-insets: 0, 1, 2;
-fx-background-radius: 3, 2, 2;
}
JavaFXでcssを使用する方法については、 JavaFXcssリファレンスガイドを参照してください。
TextFieldは、次の理由で機能しません。2.列数が固定されているため、幅を動的に変更する必要があります。
TextFieldはサイズ変更可能なコントロールです。適切な制約を設定してサイズ変更レイアウトペインに配置すると、幅が動的に変更されます。TextFieldで設定する列数は、固定の列数ではなく、優先される列数です。