聊天gui的组件选择

时间:2013-02-24 18:24:37

标签: java swing

事实上,我只是开始积极练习摇摆,以便我的理论知识得心应手:)我已经为聊天GUI实现做了很多工作,但最后还是遇到了一些问题。所以我决定从头开始重新设计聊天GUI,但我需要为它做出正确的组件选择。

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

我目前的聊天实现包含以下组件:

  • JScrollPane向上/向下滚动消息
  • 每条消息都是内置JLabel的JPanel。 JLabel可以很好地使用HTML,因此很容易将微笑令牌更改为。还有来自两个字符串的消息构造:发件人的姓名和消息。因此,在JLabel中支持HTML允许我们使用标记标记发件人的姓名。

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

  • JLabel使用HTML但是如果你使用JScrollPane.HORIZONTAL_SCROLLBAR_​​NEVER,那么就不会有更多的单词包装了。用JTextArea替换JLabel并不是一个好主意,因为JTextArea不能与HTML一起使用。
  • 添加新消息时,无法自动向下滚动滚动条。至少我没有成功。
  • 当从服务器收到新消息时,很难控制组件数量(带JLabel的JPanel)删除旧组件。否则,可以在活动聊天中在十五分钟内创建数百个带有JLabel的JPanel。 WeakReference在这里很好,但从一开始就为每条消息使用JPanel + JLabel是糟糕的设计。

还有其他一些问题,但它们并不那么重要,也无法影响“返工决定”。

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

1 个答案:

答案 0 :(得分:2)

你的设计很糟糕,你应该心疼。

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

只需使用JTextPane或类似的东西!这个函数来自我的程序,在一个扩展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);
}