【问题标题】:implementing GUI for chat in java在java中实现聊天的GUI
【发布时间】:2014-09-29 13:31:23
【问题描述】:

我想在 java 中实现聊天应用程序,我希望它显示像 Viber 这样的消息: 用户以右对齐方式发送的消息 他的朋友左对齐的消息 我也想要他们不同的风格。

聊天信息可以包含:文字、图片等。

我使用JPannel chatPchatP.setLayout(new BoxLayout(chatPl, BoxLayout.PAGE_AXIS) 聊天窗口 对于短信,我使用 JTextpane,我使用 setAlignmentX("alignment"); 进行设置对齐! :

       `JTextPane jtp = new JTextPane(){

        private static final long serialVersionUID = 1L;

        @Override
        public Dimension getMinimumSize(){
            return new Dimension(message.length()*5, getContentHeight(message.length()*5,message)+10);
        }
        @Override 
        public Dimension  getMaximumSize(){
            return  new Dimension(message.length()*5, getContentHeight(message.length()*5,message)+10);
        }
    }; jtp.setAlignmentX(Component.LEFT_ALIGNMENT);`

对于其他类型的消息,我创建了一个包含它的 JPanel。 并将这些组件添加到JPannel chatP

我的问题是设置 JTextpane 的大小以修复其消息。还有对齐!

【问题讨论】:

    标签: java swing layout alignment jtextpane


    【解决方案1】:
    jtp.setAlignmentX(Component.LEFT_ALIGNMENT);
    

    是徒劳的。您必须在文档级别设置对齐方式。正如您所说,您使用样式,因此您的窗格具有 StyledDocument 的实例,您可以通过 jtp.getDocument() 获取文档。

    StyledDocument 有方法

    public void setParagraphAttributes(int offset, 
                                       int length, 
                                       AttributeSet s, 
                                       boolean replace);
    

    在 AttributeSet 中,您可以设置所需的对齐方式并传递给应用于所需文本片段的方法以对齐它。

    居中对齐见here示例2

    【讨论】:

    • 如何设置文本窗格的首选,以修复其内容?
    • 然后接受正确的答案。对于内容大小,请使用 java-sl.com/tip_text_height_measuring.html
    • 我用那个,但是它没有正确估计高度,我还需要测量高度和宽度,(创建textPane后文本不会改变)
    • 你不能同时估计高度和宽度。想象一大段文字。如果你问它的宽度,它将是 10 000,高度是 14 像素(对于某些字体)。如果可用宽度是例如800 像素的文本被包裹成多行,高度将是例如100 像素,但如果宽度较小,高度较大。实际上,您应该指定宽度并获取此宽度的高度,或者只调用 getPreferredSize() 并且宽度将是线的最大宽度
    • 如果文本长度很小,我希望我的每一行都为 440px 或更小(所以高度应该固定为一行,我应该估计宽度),但我不知道如何测量文本长度
    猜你喜欢
    • 2017-06-26
    • 2012-05-09
    • 2011-06-01
    • 2014-11-20
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2015-02-23
    • 2012-07-07
    相关资源
    最近更新 更多