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

我正在制作类似于聊天的应用程序。为此,我有两个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);

                }

问题是,如果我在输入文本的某些单词上有颜色,则输出全部为彩色。因此,颜色在移动到显示时会应用到所有文本(在输入上正确显示时)。关于如何正确移动文字的任何建议?


注意,其他格式也一样,如粗体,斜体等


偶然的你
浏览 409回答 3
3回答

白衣染霜花

在缺乏良好的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();                }            });    }}问候

三国纷争

通过合并两个窗格的文档模型来解决此问题。解决此问题的方法是:在文本检索中保留格式
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java