データベース デザイナーを作成したいので、2 つのテーブル間の関係を作成するための UI も必要になる場合があります。ツール:JAVAスイング
1 に答える
あなたの質問に対する短い答えは、いいえです。既製のコンポーネントはありません。体を丸めて手を汚さなければなりません。
問題を分解します。
エンティティを浮動可能にする必要があります。あなたが持っている唯一の(まともな)選択肢はJLayeredPane
とJDesktopPane
. どちらを選択するかは、実装する機能によって異なります。私はおそらくから始めJLayeredPane
ます。これにより、コンポーネントを必要な場所に配置できるようになり、Z レベルをより簡単に制御できるようになります。
これに関する問題は、コンポーネントの配置だけでなく、サイズの変更も担当することになります。
次に、エンティティ コンポーネントが必要です。
私の考えでは、これは一連の複合コンポーネントです。テーブルの名前、展開コントロール、およびそれをドラッグできる手段を提供する「ヘッダー」または「タイトル」コンポーネントが必要です。
私は単純なものから始めJPanel
ます。JLabel
その上に、 、 a 、および aまたはJTextField
のいずれかを追加して、私が求めていた外観に応じて、展開コントロールとして機能させます。JButton
JLabel
はJLabel
、ヘッダーのタイトルとして機能します。JTextField
編集者としての意志。まず、テキスト フィールドを非表示にします。レイアウト マネージャーを少し巧妙に使用すると、スペース プレースに 2 つのコンポーネントを配置できます。テキスト フィールドが表示されると、ラベルの上に重ねることができます。
このコンポーネントには、マウス リスナーとマウス モーション リスナーを追加する必要があります。クリックすると、エディターが表示されます。ActionListener
とを使用してFocusListener
、ユーザーがいつ編集を終了したかを判断し、ラベルを更新してエディターを非表示にします。Escおそらく、ユーザーが編集をキャンセルできるようにフィールドにa をバインドすることも必要になるでしょう。これにはキーバインドが最適です。
また、「エンティティ」の位置を変更できるように、マウス ドラッグ イベントを追跡する必要があります。
次に、このヘッダー コンポーネントがエンティティ コンポーネントに追加されます。
フィールド情報を保持するには、JList
またはが必要です。JTable
私の考えでは、aJTable
が最も多くの機能を提供し、フィールド情報をより簡単に編集できるようにします。
また、あるテーブルから別のテーブルへのリンクを提供するために、いくつかのカスタム ペイントを実行する必要があります。これは重要な問題であり、非常に優れた設計が必要になります。
開始するために必要なものはすべて、Creating a GUI With JFC/Swingにありますが、 Performing Custom Painting and 2D Graphicsを読んで理解する必要もあります。