次の画像を見てください。
写真のように「チャット メッセージ」を表示するには、どのコンポーネントを使用しますか? html を使用した単純な JTextPane ですか? ここで同様のものを作成するための最良のアプローチは何でしょうか? メッセージをターゲットにして、印刷後に削除/編集するのが簡単なアプローチが欲しい.
これには JList を使用します。レンダラーは、GUI が示すように複数行の表示を可能にすることができます。JList は、実際のコンポーネントではなくコンポーネントのレンダリングを表示するため、多くの JLabel を含む JPanel よりも効率が向上します。JTextPane も同様に機能する可能性がありますが、表示内のテキストは直接編集可能であってはならないため、必要ではないと思います。むしろ、一番下の JTextField または JTextArea で編集と入力を行う必要があります。別のオプションは、単一の列で JTable を使用することです。上記と同じ考え方ですが、必要に応じてセルを編集できます。
あなたの状態を編集
:
しかし、JList で Name - Date (改行) メッセージ部分を作成するにはどうすればよいでしょうか? それは1つのリスト項目でしょうか?
いいえ、セル レンダラーは複数行の表示を可能にするコンポーネントを使用します。おそらく、2 つの JLabel を保持する JTextPane または JPanel です。
編集 2
では、JList の各項目は JPanel になりますか?
いいえ、まったくありません。セル レンダラー はJPanelでもかまいませんが、JList の各アイテムは、Chatter、Date、および String (テキスト) のフィールドを持つ、目的のために作成されたクラスのオブジェクトになります。
編集 3
JList のモデルは GUI コンポーネントを保持するのではなく、JList によって表示される論理情報を保持することを理解してください。
たとえば、クラスを作成できます。
public class ChatEntry {
private Chatter chatter; // holds the chatter's name, and any other relevant info
Date date; // time of chat entry
String text; // the text entered
//..... getters setters and constructor
}
次に、JList は になりますがJList<ChatEntry>
、さらに重要なのは、リストのモデルが ChatEntry アイテムを保持することです。
次に、ChatEntry 情報を表示可能/レンダリング可能なコンポーネントに変換するセル レンダラーを作成します。