VisioまたはUMLクラス図エディターを使用したことがある場合は、私が何を達成しようとしているのかがわかります。JFrame内で、ユーザーは編集可能な小さなテキストフィールドを囲む省略記号を追加できます。これらの楕円は、ユーザーがドラッグしたときにフレーム内で再配置できます。楕円をクリックすると、テキストが編集可能になります。カラットが表示されたり、部分文字列を強調表示したりできます。
基本的な構造を設定しました。「ellipse」は自己完結型のコンポーネントであり、含まれているJFrameとそのリスナーからメソッドが呼び出されます。私は2つのアプローチを試しました:
コンポーネントのdraw()メソッドで、TextLayoutを使用して境界を見つけ、含まれているテキストを楕円内に配置し、TextLayoutのdraw()を使用してフレームに描画します。これは速いです。JFrame内でコンポーネントをドラッグすると、マウスオーバーとマウスクリックの動作はすべて簡単です。ただし、編集機能については、ヒットテスト、カラットポジショニング、テキストの強調表示、行の折り返しなどを処理するために、多くのカスタムコードを作成する必要があるようです。
コンポーネントに含まれているJFrameへの参照を含め、楕円を描画した後、そのJFrameにTextComponentを追加または再配置します。これには、編集および行の折り返しのためのすべての組み込みTextComponent動作の利点があります。しかし、ロジスティクスは非常に雑然としており、TextComponentの配置も面倒になります。特に、ユーザーがコンポーネントをドラッグした場合はなおさらです。
私はおそらくこれをすべて間違っていると考えています。私がまだ遭遇していない、これを行う簡単な方法を誰かが提案できますか?