事实上,我只是开始积极练习挥杆,以便我的理论知识派上用场:) 我已经为聊天 GUI 实现做了很多工作,但最后还是遇到了一些问题。所以我决定从头开始重新设计聊天 GUI,但我需要为它做出正确的组件选择。
首先,我必须说在第一个实现中没有“输入”功能。
我当前的聊天实现由以下组件组成:
- JScrollPane 向上/向下滚动消息
- 每条消息都是 JPanel,里面有 JLabel。JLabel 与 HTML 配合得很好,因此很容易将微笑标记更改为 . 消息也由两个字符串构成:发件人姓名和消息。同样,JLabel 中对 HTML 的支持让我们可以用标签标记发件人的姓名。
我认为我被卡住并且聊天 GUI 应该从头开始重新设计的原因:
- JLabel 与 HTML 一起使用,但如果您使用 JScrollPane.HORIZONTAL_SCROLLBAR_NEVER,则其中不再包含任何文字。用 JTextArea 替换 JLabel 不是一个好主意,因为 JTextArea 不适用于 HTML。
- 添加新消息时,不可能自动向下滚动滚动条。至少我没能做到。
- 当从服务器接收到新消息时,很难控制组件(带有 JLabels 的 JPanel)的数量来删除旧组件。否则,可以在 10 到 15 分钟的活跃聊天中使用 JLabels 创建数百个 JPanel。WeakReference 在这里很好,但是从一开始就对每条消息使用 JPanel + JLabel 是不好的设计。
还有一些其他问题,但它们并不那么关键,也不会影响“返工决定”。
如果您能根据上述“原因”提示哪些组件非常适合聊天等应用程序,我将不胜感激。