看一下下图:
用什么组件使“聊天消息”显示在图片上?它只是一个带有html的简单JTextPane吗?这里最好的方法是创造类似的东西?我希望能够轻松定位消息并在打印完消息后对其进行删除/编辑。
答案 0 :(得分:4)
我会为此使用JList。您的渲染器可以允许在GUI显示时显示多行,并且JList比具有大量JLabel的JPanel提高了效率,因为它不显示实际组件,而是显示组件。 JTextPane也可以正常工作,但我认为没有必要,因为显示中的文本不应该直接编辑。而是底部的JTextField或JTextArea是编辑和输入应该发生的地方。另一种选择是使用具有单列的JTable - 与上面相同的想法,但允许根据需要编辑单元格。
修改强>
你说:
但是我如何在JList中创建Name-Date(换行符)消息部分?这是一个列表项吗?
不,单元格渲染器将使用允许多行显示的组件,可能是JTextPane或包含两个JLabel的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信息转换为可显示/可渲染的组件。