実際、理論的な知識が役立つように、積極的にスイングの練習を始めています:)チャットGUIの実装についてはすでに多くのことを行っていますが、最終的にはいくつかの問題に悩まされています。そこで、チャットGUIを最初から作り直すことにしましたが、そのためのコンポーネントを正しく選択する必要があります。
最初に、最初の実装には「入力」機能がないことを言わなければなりません。
私の現在のチャットの実装は、次のコンポーネントで構成されています。
- メッセージを上下にスクロールするJScrollPane
- 各メッセージは、JLabelが含まれているJPanelです。JLabelはHTMLでうまく機能するため、smilesトークンをに簡単に変更できます。また、メッセージは、送信者の名前とメッセージの2つの文字列から構成されます。繰り返しになりますが、JLabelでHTMLをサポートすると、送信者の名前にタグを付けることができます。
私が立ち往生していると思う理由とチャットGUIは最初から作り直す必要があります:
- JLabelはHTMLで機能しますが、JScrollPane.HORIZONTAL_SCROLLBAR_NEVERを使用すると、単語が折り返されることはありません。JLabelをJTextAreaに置き換えることはお勧めできません。これは、JTextAreaがHTMLで機能しないためです。
- 新しいメッセージが追加されたときにスクロールバーを自動的に下にスクロールする可能性はありません。少なくとも私はそれをなんとかすることができませんでした。
- サーバーから新しいメッセージを受信したときに古いコンポーネントを削除するために、コンポーネント(JLabelsを使用するJPanels)の量を制御することは困難です。それ以外の場合は、アクティブなチャットで10〜15分でJLabelを使用して数百のJPanelを作成できます。ここではWeakReferenceは適切ですが、各メッセージにJPanel + JLabelを使用することは、最初から悪い設計です。
他にもいくつかの問題がありますが、それらはそれほど重要ではなく、「やり直しの決定」に影響を与えることはできませんでした。
上記の「理由」に基づいて、チャットなどのアプリケーションに適したコンポーネントのヒントを教えていただければ幸いです。