gpt4 book ai didi

java - 如何从 JtextPane 获取样式?

转载 作者:行者123 更新时间:2023-12-01 12:51:56 25 4
gpt4 key购买 nike

我有一个带有格式化文本的 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
导入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();
}
}

关于java - 如何从 JtextPane 获取样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24163370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com