如何创建和使用 JTextPane
How to create and use a JTextPane
我想在 Java 中创建一个程序,它是这样完成的:
一个window 包含一个按钮和一个无法修改的组件(JTextArea、JTextPane 等),其中根据某些工作的执行会出现一些字符串。
从图中可以看出,如果作业成功,文本将为黑色,如果有错误,将标记为红色。
我设法使用 JTextArea 和 JButton 正确地完成了所有操作,但我发现您无法逐行更改字符串的颜色。
我读到应该使用 JTextPane,但我无法使用它。
这是我写的代码:
public class Example {
public Example() {
JFrame frame = new JFrame();
JTextPane pane = new JTextPane();
JButton button = new JButton("Button");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setPreferredSize(new Dimension(200, 200));
frame.add(pane);
frame.add(button);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
}
当我运行程序时,创建的是这样的:
TextPane 在哪里?
另外,在我使用append()在JTextArea中添加文本之前,我没有找到与JTextPane类似的方法吗?你如何使用它?
如何更改单行的颜色?
我已经阅读、看到并尝试了在互联网上找到的各种示例,但我无法完成任何事情...
有类似的例子吗?
对于“通用”请求,我深表歉意...
谢谢
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class Example {
public Example() {
JFrame frame = new JFrame();
JTextPane pane = new JTextPane();;
JButton button = new JButton("Button");
addColoredText(pane, "Red Text\n", Color.RED);
addColoredText(pane, "Blue Text\n", Color.BLUE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setPreferredSize(new Dimension(200, 200));
frame.getContentPane().add(pane, BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.WEST);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
public void addColoredText(JTextPane pane, String text, Color color) {
StyledDocument doc = pane.getStyledDocument();
Style style = pane.addStyle("Color Style", null);
StyleConstants.setForeground(style, color);
try {
doc.insertString(doc.getLength(), text, style);
}
catch (BadLocationException e) {
e.printStackTrace();
}
}
}
试试这个例子
我建议您查看 JavaFX,它有更好的 UI。
但是,您已经在使用 JPanel 和 JButton。您可以使用 JLabel 来显示所需的文本,并使用 JLabel.setTextFill(Color.WHITESMOKE)
来设置文本的颜色。
这是一个更好的开始:
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
public class test {
public test() throws BadLocationException {
JFrame frame = new JFrame();
DefaultStyledDocument document = new DefaultStyledDocument();
JTextPane pane = new JTextPane(document);
JPanel mainPanel = new JPanel();
JButton button = new JButton("Button");
button.setPreferredSize(new Dimension(100, 40));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setPreferredSize(new Dimension(200, 200));
mainPanel.add(button);
frame.getContentPane().add(pane, BorderLayout.CENTER);
frame.getContentPane().add(mainPanel, BorderLayout.WEST);
StyleContext context = new StyleContext();
// build a style
Style style = context.addStyle("test", null);
// set some style properties
StyleConstants.setForeground(style, Color.BLACK);
document.insertString(0, "Four: success \n", style);
StyleConstants.setForeground(style, Color.RED);
document.insertString(0, "Three: error \n", style);
document.insertString(0, "Two: error \n", style);
StyleConstants.setForeground(style, Color.BLACK);
// add some data to the document
document.insertString(0, "One: success \n", style);
// StyleConstants.setForeground(style, Color.blue);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) throws BadLocationException {
new test();
}
}
它非常基础,但应该可以帮助您入门。当您必须通过颜色添加文本和级联时,您可以创建不同的方法。
JTextPane消失是因为在同一区域添加多个组件会覆盖后面添加的新组件。所以你需要将它们添加到不同的区域。
frame.add(pane);
frame.add(button,BorderLayout.SOUTH);
像这样。我建议您查看布局。
我想在 Java 中创建一个程序,它是这样完成的:
一个window 包含一个按钮和一个无法修改的组件(JTextArea、JTextPane 等),其中根据某些工作的执行会出现一些字符串。 从图中可以看出,如果作业成功,文本将为黑色,如果有错误,将标记为红色。
我设法使用 JTextArea 和 JButton 正确地完成了所有操作,但我发现您无法逐行更改字符串的颜色。
我读到应该使用 JTextPane,但我无法使用它。 这是我写的代码:
public class Example {
public Example() {
JFrame frame = new JFrame();
JTextPane pane = new JTextPane();
JButton button = new JButton("Button");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setPreferredSize(new Dimension(200, 200));
frame.add(pane);
frame.add(button);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
}
当我运行程序时,创建的是这样的:
TextPane 在哪里?
另外,在我使用append()在JTextArea中添加文本之前,我没有找到与JTextPane类似的方法吗?你如何使用它? 如何更改单行的颜色?
我已经阅读、看到并尝试了在互联网上找到的各种示例,但我无法完成任何事情... 有类似的例子吗?
对于“通用”请求,我深表歉意...
谢谢
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class Example {
public Example() {
JFrame frame = new JFrame();
JTextPane pane = new JTextPane();;
JButton button = new JButton("Button");
addColoredText(pane, "Red Text\n", Color.RED);
addColoredText(pane, "Blue Text\n", Color.BLUE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setPreferredSize(new Dimension(200, 200));
frame.getContentPane().add(pane, BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.WEST);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
public void addColoredText(JTextPane pane, String text, Color color) {
StyledDocument doc = pane.getStyledDocument();
Style style = pane.addStyle("Color Style", null);
StyleConstants.setForeground(style, color);
try {
doc.insertString(doc.getLength(), text, style);
}
catch (BadLocationException e) {
e.printStackTrace();
}
}
}
试试这个例子
我建议您查看 JavaFX,它有更好的 UI。
但是,您已经在使用 JPanel 和 JButton。您可以使用 JLabel 来显示所需的文本,并使用 JLabel.setTextFill(Color.WHITESMOKE)
来设置文本的颜色。
这是一个更好的开始:
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
public class test {
public test() throws BadLocationException {
JFrame frame = new JFrame();
DefaultStyledDocument document = new DefaultStyledDocument();
JTextPane pane = new JTextPane(document);
JPanel mainPanel = new JPanel();
JButton button = new JButton("Button");
button.setPreferredSize(new Dimension(100, 40));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setPreferredSize(new Dimension(200, 200));
mainPanel.add(button);
frame.getContentPane().add(pane, BorderLayout.CENTER);
frame.getContentPane().add(mainPanel, BorderLayout.WEST);
StyleContext context = new StyleContext();
// build a style
Style style = context.addStyle("test", null);
// set some style properties
StyleConstants.setForeground(style, Color.BLACK);
document.insertString(0, "Four: success \n", style);
StyleConstants.setForeground(style, Color.RED);
document.insertString(0, "Three: error \n", style);
document.insertString(0, "Two: error \n", style);
StyleConstants.setForeground(style, Color.BLACK);
// add some data to the document
document.insertString(0, "One: success \n", style);
// StyleConstants.setForeground(style, Color.blue);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) throws BadLocationException {
new test();
}
}
它非常基础,但应该可以帮助您入门。当您必须通过颜色添加文本和级联时,您可以创建不同的方法。
JTextPane消失是因为在同一区域添加多个组件会覆盖后面添加的新组件。所以你需要将它们添加到不同的区域。
frame.add(pane);
frame.add(button,BorderLayout.SOUTH);
像这样。我建议您查看布局。