如何从 JtextPane 获取样式?

2024-05-06

我有一个带有格式化文本的 JtextPane。我需要复制完整的样式和属性 从此文本将其传输到另一个 JtextPane。有示例或代码片段吗 看看它是如何工作的?

好的,这是我找到的代码,我做了一些更改:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class Main  {

private JTextPane textPane1;
private JTextPane textPane2;
private Document doc1;
private Document doc2;
private JFrame frame1;
private JFrame frame2;

private MutableAttributeSet black;    
private MutableAttributeSet red;
private AttributeSet attribute;    

public Main() {
    textPane1 = new JTextPane();

    black = new SimpleAttributeSet();
    red = new SimpleAttributeSet();
    StyleConstants.setForeground(black, Color.black);
    StyleConstants.setForeground(red, Color.red);
    textPane1.setEditorKit(new StyledEditorKit());                    
    doc1 = textPane1.getDocument();       

    append1("This is a Test!\n");

    //set color = red
    attribute = red;
    append1("Hello world! Hello Stackoverflow\n");        

    //set color = black
    attribute = black;
    append1("the text is black again\n");     

    StyledDocument styledDocument = textPane1.getStyledDocument();

    textPane2 = new JTextPane();
    textPane2.setEditorKit(new StyledEditorKit());
    doc2 = textPane2.getDocument();
    String text = textPane1.getText();
    append2(text);

    //transfer format data of text in frame1 to frame2
    int docLength = doc1.getLength();
    Element element;        
    AttributeSet attribSet;
    for(int i=0;i<docLength;i++) {            
        element = styledDocument.getCharacterElement(i);            
        attribSet = element.getAttributes();            
        StyleConstants.setForeground(red, Color.red);
    }

    createFrames();        
}

private void append1(String text){
    try {
        doc1.insertString(doc1.getLength(), text, attribute);
    } catch (BadLocationException ex) {
        ex.printStackTrace();
    }
}

private void append2(String text) {
    try {
        doc2.insertString(doc2.getLength(), text, attribute);
    } catch (BadLocationException ex) {
        ex.printStackTrace();
    }
}

private void createFrames() {
    frame1 = new JFrame("frame 1");     
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.setSize(400, 300);
    frame1.setLocationRelativeTo(null);
    frame1.getContentPane().add(new JScrollPane(textPane1), BorderLayout.CENTER);
    frame1.setVisible(true);

    frame2 = new JFrame("frame 2");
    frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame2.setSize(400, 300);
    frame2.setLocation(300,0);
    frame2.getContentPane().add(new JScrollPane(textPane2), BorderLayout.CENTER);
    frame2.setVisible(true);
}

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

我还想将格式样式和属性传输到第二个框架。


我已经解决了。

enter image description here
import java.awt.*;

import javax.swing.*;
import javax.swing.text.*;

public class Main  {

private JTextPane textPane1;
private JTextPane textPane2;
private Document doc1;
private Document doc2;
private JFrame frame1;
private JFrame frame2;

private MutableAttributeSet black;    
private MutableAttributeSet red;
private AttributeSet attribute;    

public Main() throws BadLocationException {
    textPane1 = new JTextPane();

    black = new SimpleAttributeSet();
    red = new SimpleAttributeSet();
    StyleConstants.setForeground(black, Color.black);
    StyleConstants.setForeground(red, Color.red);
    textPane1.setEditorKit(new StyledEditorKit());                    
    doc1 = textPane1.getDocument();       

    append1("This is a Test!\n");

    //set color = red
    attribute = red;
    append1("Hello world! Hello Stackoverflow\n");        

    //set color = black
    attribute = black;
    append1("the text is black again\n");     


    //IMPORTANT PART: attribute of each character from the styled text will 
    //be transfered to the second textpanel
    StyledDocument styledDocument = textPane1.getStyledDocument();   
    Element element; 

    textPane2 = new JTextPane();
    textPane2.setEditorKit(new StyledEditorKit());

    doc2 = textPane2.getDocument(); 
    for(int i=0; i<styledDocument.getLength();i++) {
        element = styledDocument.getCharacterElement(i);
        AttributeSet attributeNew = element.getAttributes();   
        System.out.println(i);
        append2(styledDocument.getText(i, 1), attributeNew);    
    }

    createFrames();        
}

private void append1(String text){
    try {
        doc1.insertString(doc1.getLength(), text, attribute);
    } catch (BadLocationException ex) {
        ex.printStackTrace();
    }
}

private void append2(String text, AttributeSet attributeNew) {
    try {
        doc2.insertString(doc2.getLength(), text, attributeNew);
    } catch (BadLocationException ex) {
        ex.printStackTrace();
    }
}

private void createFrames() {
    frame1 = new JFrame("frame 1");     
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame1.setSize(400, 300);
    frame1.setLocationRelativeTo(null);
    frame1.getContentPane().add(new JScrollPane(textPane1), BorderLayout.CENTER);
    frame1.setVisible(true);

    frame2 = new JFrame("frame 2");
    frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame2.setSize(400, 300);
    frame2.setLocation(300,0);
    frame2.getContentPane().add(new JScrollPane(textPane2), BorderLayout.CENTER);
    frame2.setVisible(true);
}

public static void main(String args[]) throws BadLocationException {
    new Main();     
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 JtextPane 获取样式? 的相关文章

随机推荐