web-dev-qa-db-ja.com

カスタムSwingコンポーネントを作成する方法

私は常にJavaでカスタムコンポーネントを作成したり、既存のコンポーネントをカスタマイズしたりしたいと思っていましたが、私の検索で何も役に立たなかったのです。そこで、StackOverflowコミュニティに質問することにしました。

カスタマイズに関する情報はどこにありますかJava GUIコンポーネント全般?

そして、私がカスタマイズすることを意味するとき、私は色、フォントなどの変更について話しているのではありません。つまり、本当にそれらをカスタマイズすることを意味します。 2つのモックアップサンプルコンポーネントを次に示します。

Custom Components Mockup

注意事項
主に上記の2つのカスタムコンポーネントを作成する方法を見つけるためにこの質問を始めました。しかし、Swingコンポーネントのハッキングに関する一般的な質問はないことに気付きました。そのため、リソースのリストを用意したほうがよいと思いました。

モックアップの2つのコンポーネントがどのように機能するのか疑問に思われる場合は、次のようになります。

方向ごとに2つのスクロールバーを持つカスタマイズされたJScrollPane。各スクロールバーは異なる動作をすることができます。たとえば、外側のものは通常どおりにスクロールし、内側のものはビューをより Picasa のように移動します。私は実際にグーグルグループから実用的な(!)答えを得ました ここ 、しかしそれはただのコードでした。

2つ目は、カスタムJComboBoxで、ポップアップリストが展開されると、最後にJComponentがあります。これは、アイコン付きの単純なJLabelから、リストをある方法で操作するJButtonまで、何でもかまいません。

しかし、この質問はそれらの特定のコンポーネントについてではありません。それらを作成する方法を学ぶためにリソース(ウェブサイト、本、記事など)を見つけることについてです。

37
pek

この記事 カスタムSwingコンポーネントの記述方法 は非常に役立ちます。離散ステップと連続範囲の両方を持つWindowsスライダーコントロールの複製について説明します。

18
John K

JDKはオープンソースです。 Swingコンポーネントの記述方法を理解するには、Swingコンポーネントのソース以外に探すべき場所はありません。一般に、カスタムコンポーネントを作成する場合、次の1つ以上に関心があります。{相互作用セマンティクス、視覚的表現、構成構造}

最も単純なケースから始めます。

パッシブコンポーネント:JLabel
インタラクティブコンポーネント:JButton

JLabelは、コンポーネントのカスタム描画のためのJComponentの最小限の拡張機能を示します。この場合、それは表現として「テキスト」文字列値を描画しています。

JButtonは、コンポーネントを描画するだけでなく、ユーザー操作のための最小限の拡張機能を示します。

15
alphazero

不潔なリッチクライアント は、このトピックに関する優れた非常に読みやすい本です。完全に新しいコンポーネントを作成するよりも、Swingコンポーネントのルックアンドフィールを改善することの方が重要ですが、Swingの本質を理解し、多くの実用的な例を提供します。

10
Amanda S

これはかなり未解決の質問です。簡単な答えは、サブクラス JComponent またはその子孫の1つであり、必要とする。明らかに、何をしたいかによって、これは難易度が異なる場合があります。手始めに、Sunの Swingコンポーネントの使用に関するチュートリアル を読んで、 スクロールペイン および ポップアップメニュー 。それらを読んで実験すると、より具体的な質問ができるようになり、人々が考えた答えを提供しやすくなります。

モックアップの2つのコンポーネントが実装したいすべての場合は、それらの機能をどのように機能させるかについてのより良いアイデアを提供すると、より良い答えが得られます。

4
ninesided

個人的に私は上記の答えがあまりにも一般的または漠然としています。また、私と同じように誰かが必然的にこのスレッドにぶつかるので、私が見つけたものを提供することもできます:

お役に立てれば...

2
kralyk

Swing Hacks:Tips&Tools for Building Killer GUIs(Marinacci、Adamson) をお読みください。私見スイング一般的に効果的に作業するための不可欠な本。

1
Daniel Hiller