我正在使用JTextPane显示一些包含带边框的表格的HTML.我希望它有一个简单的1像素边框.
我试过用style="border: 1px solid; border-collapse:collapse".这适用于Web浏览器,但不适用于JTextPane.
有没有办法在JTextPane中使用HTML使用简单的1像素表格边框?
不同的是JTextArea,JTextPane没有选择关闭换行.我找到了一个解决JTextPane s中换行的方法,但对于这样一个简单的问题来说它似乎太冗长了.有一个更好的方法吗?
我在尝试实现控制台样式组件时遇到了 JTextPane 的性能限制。在大多数情况下,我的控制台运行良好,但是尝试使用大量非空格分隔文本向它发送垃圾邮件最终会完全冻结 GUI。我想避免这种情况,或者至少提供一个以正常方式点击停止按钮的机会。
一些快速分析显示,EDT 大部分时间都被困在 JTextPane 中布置文本(将 LabelViews 作为其 EditorKit 实现的一部分进行布置) - 由于 Swing 的东西应该在 EDT 上完成,我以为我被搞砸了。但随即又是一丝希望。经过一番研究,我偶然发现了一些丢失的摇摆艺术。即,Timothy Prinzing撰写的这篇文章。
这篇(现已完全失效)文章描述了如何将困扰我(布局)的问题从 EDT 中排除,定义了一个名为 的类AsyncBoxView,令我惊讶的是,它现在是 Swing 的一部分。但...
在修改我的编辑器工具包以创建 AsyncBoxView 而不是通常的之后BoxView,我立即遇到了一个障碍——它在初始化期间抛出了一个 NPE。这是一些代码:
package com.stackoverflow
import java.awt.*;
import java.awt.event.*;
import java.util.concurrent.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class ConsoleTest extends JFrame {
public static final boolean USE_ASYNC_BOX_VIEW = true;
public static final int MAX_CHARS = 1000000;
public static final int MAX_LINES = 100;
private static …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用a JTextPane来显示一些日志信息.由于我想高亮显示本文中的某些特定行(例如错误消息),因此我将其设置contentType为" text/html".这样,我可以格式化我的文本.
现在,我创建一个JButton,将其内容复制JTextPane到剪贴板中.这部分很简单,但我的问题是,当我打电话时myTextPane.getText(),我会得到HTML代码,例如:
<html>
<head>
</head>
<body>
blabla<br>
<font color="#FFCC66"><b>foobar</b></font><br>
blabla
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
而不是只获取原始内容:
blabla
foobar
blabla
Run Code Online (Sandbox Code Playgroud)
有没有办法只获取我JTextPane的纯文本内容?或者我是否需要自己将HTML转换为原始文本?
我有一个应用程序,它不断地在套接字上接收数据,然后将这些数据记录到文件中,同时在JTextPane中显示这些数据.当然,随着数据被写入JTextPane的底层文档,内存使用量继续增加.
是否有一种简单的方法来限制JTextPane允许使用的内存?我希望JTextPane的工作方式类似于典型命令shell的命令历史记录的工作方式.
有没有办法从填充文本jtextpane"提取"行数?如果有的话,如果某些行是由文本包装引起的吗?
我有一个声明如下的JTextPane:
JTextPane box = new JTextPane();
JScrollPane scroll = new JScrollPane();
StyledDocument doc = box.getStyledDocument();
scroll.setViewportView(box);
scroll = new JScrollPane(box);
Run Code Online (Sandbox Code Playgroud)
我正在附加文本如下:
public void appendChatText(String text)
{
try
{
doc.insertString(doc.getLength(), text, null);
box.setAutoscrolls(true);
box.setCaretPosition(box.getDocument().getLength());
}
catch(BadLocationException e)
{
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我还设法轻松地让JTextPane根据需要显示图像和组件,但我无法弄清楚如何将可点击文本编码到JTextPane中.例如,我希望它打印一条消息,上面写着"文件上传到服务器.接受*拒绝*",如果用户点击接受或拒绝字符串,则它会执行相应的功能.关于如何有效实现这一目标的任何想法?
我的聊天客户端有一个JTextPane,其中插入了文本,最多可以达到每秒几行.它通常工作正常,即使是较长的时间(例如一小时),但有时它会变得非常慢,使用大量的CPU和内存,有时高达1GB并且几乎完全冻结.
我添加了"-Xrunhprof:heap = sites"参数来查找使用内存的内容以及我可以收集的内容,它与文本呈现有关,虽然我真的不知道这些内容,所以它更多一个有根据的猜测.这是结果的一部分,在内存使用异常高时采用.我在每个条目下都包含了适当的跟踪.其他堆转储看起来略有不同,但它总是指向相同或类似的类(名称中包含Glyph的东西).不确定如何正确解释这一点,以及它是否真的有助于解决这个问题.
percent live alloc'ed stack class
rank self accum bytes objs bytes objs trace name
1 16.33% 16.33% 11209120 350285 99416352 3106761 319103 java.awt.geom.Rectangle2D$Float
TRACE 319103:
java.awt.geom.RectangularShape.<init>(RectangularShape.java:56)
java.awt.geom.Rectangle2D.<init>(Rectangle2D.java:511)
java.awt.geom.Rectangle2D$Float.<init>(Rectangle2D.java:111)
sun.font.StandardGlyphVector$GlyphStrike.getGlyphOutlineBounds(StandardGlyphVector.java:1790)
2 14.28% 30.61% 9799744 3958 52026864 49485 319095 float[]
TRACE 319095:
sun.font.StandardGlyphVector.getGlyphInfo(StandardGlyphVector.java:851)
sun.font.ExtendedTextSourceLabel.createCharinfo(ExtendedTextSourceLabel.java:583)
sun.font.ExtendedTextSourceLabel.getCharinfo(ExtendedTextSourceLabel.java:509)
sun.font.ExtendedTextSourceLabel.getLineBreakIndex(ExtendedTextSourceLabel.java:455)
3 8.17% 38.77% 5604560 350285 49708176 3106761 319110 sun.font.DelegatingShape
TRACE 319110:
sun.font.DelegatingShape.<init>(DelegatingShape.java:43)
sun.font.StandardGlyphVector.getGlyphVisualBounds(StandardGlyphVector.java:586)
sun.font.StandardGlyphVector.getGlyphInfo(StandardGlyphVector.java:864)
sun.font.ExtendedTextSourceLabel.createCharinfo(ExtendedTextSourceLabel.java:583)
4 7.96% 46.74% 5466576 9933 40683104 164341 319090 float[]
TRACE 319090:
sun.font.GlyphLayout$GVData.createGlyphVector(GlyphLayout.java:596)
sun.font.GlyphLayout.layout(GlyphLayout.java:476)
sun.font.ExtendedTextSourceLabel.createGV(ExtendedTextSourceLabel.java:325)
sun.font.ExtendedTextSourceLabel.getGV(ExtendedTextSourceLabel.java:311)
5 4.07% …Run Code Online (Sandbox Code Playgroud) 我正在制作一个基于文本的游戏,用户输入文字来解决游戏问题.我决定使用java swing来显示文本,我希望textPane的背景为黑色.我已经尝试了我发现的所有内容(已注释掉),但是它似乎没有用.
private JTextPane blackJTextPane() {
//JTextPane area = new JTextPane();
//area.setBackground(Color.BLACK);
//area.setForeground(Color.WHITE);
JEditorPane area = new JEditorPane();
Color bgColor = Color.BLACK;
UIDefaults defaults = new UIDefaults();
defaults.put("EditorPane[Enabled].backgroundPainter", bgColor);
area.putClientProperty("Nimbus.Overrides", defaults);
area.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
area.setBackground(bgColor);
return area;
}
public Everything(){
super("Game");
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception exc) {
// ignore error
}
setSize(600,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BorderLayout layout = new BorderLayout();
setLayout(layout);
setVisible(true);
text = new JLabel("");
text.setText("Text:");
texts = new JTextField(20);
texts.setBackground(Color.white);
texts.setText("");
JPanel panel = new JPanel();
panel.add(text );
panel.add(texts); …Run Code Online (Sandbox Code Playgroud) 我希望有人可以帮助我,这就是我想要做的.
我有一个JTextPane,我想截取特定的JTextPane坐标和大小,到目前为止,我可以做一个JTextPane大小的截图,但我无法得到我的截图总是得到的特定坐标(0,0 )坐标.
这是我的方法:
void capturaPantalla ()
{
try
{
int x = txtCodigo.getX();
int y = txtCodigo.getY();
Rectangle areaCaptura = new Rectangle(x, y, txtCodigo.getWidth(), txtCodigo.getHeight());
BufferedImage capturaPantalla = new Robot().createScreenCapture(areaCaptura);
File ruta = new File("P:\\captura.png");
ImageIO.write(capturaPantalla, "png", ruta);
JOptionPane.showMessageDialog(null, "Codigo de barras guardado!");
}
catch (IOException ioe)
{
System.out.println(ioe);
}
catch(AWTException ex)
{
System.out.println(ex);
}
}
Run Code Online (Sandbox Code Playgroud) java ×10
jtextpane ×10
swing ×9
coordinates ×1
html ×1
memory-leaks ×1
screenshot ×1
unicode ×1
url ×1
word-wrap ×1