gpt4 book ai didi

java - 聊天 GUI 的组件选择

转载 作者:行者123 更新时间:2023-12-02 07:14:54 28 4
gpt4 key购买 nike

事实上,我只是开始积极练习 swing,以便我的理论知识能派上用场:) 我已经为聊天 GUI 实现做了很多工作,但最终遇到了一些问题。所以我决定从头开始重新设计聊天 GUI,但我需要为其选择正确的组件。

首先,我必须说第一个实现中没有“输入”功能。

我当前的聊天实现由以下组件组成:

  • JScrollPane 用于向上/向下滚动消息
  • 每条消息都是一个 JPanel,里面有 JLabel。 JLabel 与 HTML 配合得很好,因此可以轻松地将 smiles 标记更改为 .消息也由两个字符串构成:发件人的姓名和消息。再说一遍,JLabel 对 HTML 的支持让我们可以用标签标记发件人的姓名。

我认为我陷入困境并且聊天 GUI 应该从头开始重新设计的原因:

  • JLabel 适用于 HTML,但如果您使用 JScrollPane.HORIZONTAL_SCROLLBAR_​​NEVER,则不会再出现自动换行。用 JTextArea 替换 JLabel 并不是一个好主意,因为 JTextArea 不适用于 HTML。
  • 添加新消息时无法自动向下滚动滚动条。至少我没能做到。
  • 当从服务器收到新消息时,很难控制组件(JPanels 和 JLabels)的数量来删除旧组件。否则,可以在活跃聊天中在十十五分钟内创建数百个带有 JLabels 的 JPanel。 WeakReference 在这里很好,但对每条消息使用 JPanel + JLabel 从一开始就是糟糕的设计。

还有一些其他问题,但它们并不那么关键,不会影响“返工决定”。

如果您能根据上述“原因”提示哪些组件最适合聊天等应用程序,我将不胜感激。

最佳答案

你的设计很糟糕,你应该感觉很糟糕。

尝试从一堆连续显示的 JLabel 中复制一些文本。

只需使用 JTextPane 或类似的东西即可!这个函数来 self 的一个程序,在一个扩展JTextPane的类中,它在末尾添加了一些文本,具有一些特殊的样式。您可以对其进行修改以执行您需要的任何操作。

public void append(String append,Color fg,Color bg, boolean bold,boolean italic, boolean underline) {
try {
// Get the text pane's document
StyledDocument doc = (StyledDocument)this.getDocument();

// The color must first be wrapped in a style
Style style = doc.addStyle("StyleName", null);
StyleConstants.setForeground(style, fg);
StyleConstants.setBackground(style,bg);
StyleConstants.setBold(style,bold);
StyleConstants.setItalic(style,italic);
StyleConstants.setUnderline(style,underline);


// Insert the text at the end of the text
doc.insertString(doc.getLength(), append, style);
} catch (Exception e) {
e.printStackTrace();
}

this.setCaretPosition (this.getDocument().getLength()-1);
}

关于java - 聊天 GUI 的组件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054992/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com