簡體   English   中英

如何更新JTextPane中已經存在的行?

[英]How do I update a line already existing in JTextPane?

我想在JTextPane中添加幾行,例如Joseph Red,Clarita Red,Bob Red,然后稍后我想更新特定行的名稱和顏色,例如,我想將Joseph Red更改為Rudo Blue,或Bob Red到Molly Blue。 有辦法嗎? 每當將行添加到JTextPane並引用該特定行以在以后進行更新時,我都想記錄每行,但是想不出辦法。

String color = "Red";
JTextPane textPanel = new JTextPane();

public void addToTextPane(String name) throws BadLocationException //Add each line to JTextPane
{
    document = (StyledDocument) textPanel.getDocument();
    document.insertString(document.getLength(), name + "" + color, null);
    document.insertString(document.getLength(), "\n", null);
}

我正在嘗試執行以下操作(更新JTextPane中特定行的名稱和顏色):

if(...){ 
    status = "Blue";
    try
    {
        addTextPane("Jospeh"); //If I do this, it would not update the already exiting line and
                               //simply just add a new line with the name 'Joseph' and color 'Blue'
    }
    catch (BadLocationException e)
    {
        e.printStackTrace();
    }
}

Document#getText結合使用的for-loopDocument#remove Document#insertString應該可以解決問題。

文本

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JTextPane textPane;
        private String fruit[] = {"Bananas", "Apples", "Oranges", "Kiwis"};
        private int index;

        public TestPane() {

            StringBuilder text = new StringBuilder(64);
            text.append("Bananas in pajamas are coming down the stairs\n").
                            append("Bananas in pajamas are coming down in pairs\n").
                            append("Bananas in pajamas are chasing teddy bears\n").
                            append("Cause on tuesdays they try to catch their man-o-wears");

            textPane = new JTextPane();
            textPane.setText(text.toString());
            setLayout(new BorderLayout());

            add(new JScrollPane(textPane));

            JButton btn = new JButton("Update");
            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    index++;
                    String find = fruit[(index - 1) % fruit.length];
                    String replace = fruit[index % fruit.length];
                    System.out.println("Find: " + find);
                    System.out.println("Replace: " + replace);

                    Document doc = textPane.getDocument();

                    try {
                        for (int pos = 0; pos < doc.getLength() - find.length(); pos++) {

                            String text = doc.getText(pos, find.length());
                            if (find.equals(text)) {
                                doc.remove(pos, find.length());
                                doc.insertString(pos, replace, null);
                            }

                        }
                    } catch (BadLocationException exp) {
                        exp.printStackTrace();
                    }

                }
            });

            add(btn, BorderLayout.SOUTH);

        }

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM