繁体   English   中英

聊天gui的组件选择

[英]Components choice for chat gui

事实上,我只是开始积极练习摇摆,以便我的理论知识得心应手:)我已经为聊天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是糟糕的设计。

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

如果您能够提示某些组件适合这种应用程序(如基于上述“原因”的聊天),我将非常感激。

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

尝试从连续显示的一堆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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM