为了账号安全,请及时绑定邮箱和手机立即绑定

在文本检索中保持正确的样式

在文本检索中保持正确的样式

偶然的你 2019-12-06 14:45:23
我正在制作类似于聊天的应用程序。为此,我有两个JTextPanes,一个是我正在编写的,另一个是用于显示消息的。这是处理文本从输入到显示的传输的代码:                String input = textPane.getText();                if(!input.endsWith("\n")){                    input+="\n";                }                StyledDocument doc = displayPane.getStyledDocument();                int offset = displayPane.getCaretPosition();                textPane.setText("");                try {                    doc.insertString(offset, input, set);                } catch (BadLocationException ex) {                    Logger.getLogger(ChatComponent.class.getName()).log(Level.SEVERE, null, ex);                }问题是,如果我在输入文本的某些单词上有颜色,则输出全部为彩色。因此,颜色在移动到显示时会应用到所有文本(在输入上正确显示时)。关于如何正确移动文字的任何建议?注意,其他格式也一样,如粗体,斜体等
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

在缺乏良好的SSCCE的情况下,我真的不知道如何为JTextPane上的文本添加颜色,但是希望此方法可以为您解决问题:


import javax.swing.text.AttributeSet;

import javax.swing.text.SimpleAttributeSet;

import javax.swing.text.StyleConstants;

import javax.swing.text.StyleContext;


private void appendToTextPane(String name, Color c, String f)

{

    StyleContext sc = StyleContext.getDefaultStyleContext();

    AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);

    aset = sc.addAttribute(aset, StyleConstants.FontFamily, f);


    int len = Client.nPane.getDocument().getLength();


    textPane.setCaretPosition(len);

    textPane.setCharacterAttributes(aset, true);

    textPane.replaceSelection(name);

}

有了这个,你可以给不同的Color,并Font给每个String literal将被添加到您的JTextPane。


希望这个新的《守则》可以以某种方式对您有所帮助:


import java.awt.*;


import java.awt.event.*;


import javax.swing.*;


import javax.swing.text.AttributeSet;

import javax.swing.text.SimpleAttributeSet;

import javax.swing.text.StyleConstants;

import javax.swing.text.StyleContext;


public class TextPaneTest extends JFrame

{

    private JPanel topPanel;

    private JPanel bottomPanel;

    private JTextPane tPane1;

    private JTextPane tPane2;

    private JButton button;


    public TextPaneTest()

    {

        topPanel = new JPanel();

        topPanel.setLayout(new GridLayout(1, 2));


        bottomPanel = new JPanel();

        bottomPanel.setBackground(Color.BLACK);


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLocationRelativeTo(null);            


        StyleContext sc = StyleContext.getDefaultStyleContext();

        AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, Color.BLUE);

        aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Lucida Console");      


        tPane1 = new JTextPane();

        tPane1.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));

        tPane1.setCharacterAttributes(aset, false); // Add these settings to the other JTextPane also


        tPane2 = new JTextPane();

        tPane2.setCharacterAttributes(aset, false); // Mimic what the other JTextPane has       


        button = new JButton("ADD TO THE TOP JTEXTPANE");

        button.setBackground(Color.DARK_GRAY);

        button.setForeground(Color.WHITE);

        button.addActionListener(new ActionListener()

            {

                public void actionPerformed(ActionEvent ae)

                {

                    tPane1.setText(tPane2.getText());

                }

            });


        add(topPanel, BorderLayout.CENTER);

        add(bottomPanel, BorderLayout.PAGE_END);


        topPanel.add(tPane1);

        topPanel.add(tPane2);

        bottomPanel.add(button);


        pack();

        tPane2.requestFocusInWindow();

        setVisible(true);   

    }


    public static void main(String... args)

    {

        SwingUtilities.invokeLater(new Runnable()

            {

                public void run()

                {

                    new TextPaneTest();

                }

            });

    }

}

问候


查看完整回答
反对 回复 2019-12-06
?
三国纷争

TA贡献1804条经验 获得超7个赞

通过合并两个窗格的文档模型来解决此问题。解决此问题的方法是:在文本检索中保留格式


查看完整回答
反对 回复 2019-12-06
  • 3 回答
  • 0 关注
  • 407 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信