Tag: jtextpane

JTextPane文本背景颜色不起作用

我正在尝试使用JTextPane创建一个小的HTML-wysiwyg,但我无法使BackgroundAction工作。 我在JTextPane的StyledDocument上使用JTextPane但它似乎有问题。 视图没问题,但Document没有。 这是一个显示问题的小型演示代码。 有两个JTextPane : 我在第一个文本中设置了文本的背景颜色 我检索第一个JTextPane的文本并将其设置在第二个 – >虽然它们具有相同的文本,但它们不会显示相同的内容。 有没有办法在当前选定的文本上设置背景颜色,并让JTextPane报告更新的HTML文本? import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextPane; import javax.swing.SwingUtilities; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; public class TestDifferentStyles { private void initUI() { JFrame frame = new JFrame(TestDifferentStyles.class.getSimpleName()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JTextPane textPane = new JTextPane(); final JTextPane textPane2 = […]

如何防止JTextPane.setCaretPosition(int)中的内存泄漏?

我正在使用基于Swing的GUI开发Java应用程序。 该应用程序使用JTextPane输出日志消息,如下所示:1)截断现有文本以使总文本大小保持在限制之下; 2)追加新文本; 3)滚动到最后(实际逻辑略有不同,但这里无关紧要)。 我使用Eclipse和JVM Monitor来确定合理的文本大小限制并发现重大的内存泄漏。 我试图从底层文档中删除UndoableEditListener并禁用自动插入位置更新(通过使用DefaultCaret.NEVER_UPDATE和JTextPane.setCaretPosition(int)显式更改位置),但没有成功。 最后,我决定完全禁用更改插入位置,这样就修复了泄漏。 我有两个问题: 我的代码有问题吗? 如果是,我如何更改它以完成任务? 它是Swing / JVM错误吗? 如果是,我该如何举报? 细节: 这是SSCCE:带有textPane的GUI和两个按钮,用于小型和压力测试。 FIX和FIXXX标志对应于我修复内存泄漏的尝试。 package memleak; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.UndoableEditListener; import javax.swing.text.*; class TestMain { private JTextPane textPane; // try to fix memory leak private static final boolean FIX = false; // disable caret updates completely private […]

调整具有固定宽度的长句的对话框消息(JOptionPane)

我正在尝试使用超链接调整长句的对话框( JOptionPane )的高度。 我的代码是…… public class DialogTest { public static void main(String[] args) throws Exception { JTextPane jtp = new JTextPane(); Document doc = jtp.getDocument(); for (int i = 0; i < 50; i++) { doc.insertString(doc.getLength(), " Hello Java World ", new SimpleAttributeSet()); if ((3 == i) || (7 == i) || (15 == i)) […]

将工具提示添加到JTextPane

我想在JTextPane中只添加一些工具提示。 例如,如果JTextPane中有引用链接文本,我想在该文本中添加工具提示以显示链接。 有什么办法可以实现这个function吗?

JTextPane突出显示问题

我一直试图在小文本编辑器中实现突出显示function的最后几天。 出于某种原因,我得到一个奇怪的结果: 给出的例子应该突出显示每个“dolor” – 第一次出现是正确找到并突出显示的,但下一次出现并没有。 这是我到目前为止编写的代码: import java.awt.Color; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultHighlighter; import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter; import javax.swing.text.DefaultStyledDocument; /** * Highlighting created on 04.11.2013 * * Specification: */ public class Highlighting extends JFrame implements MouseListener { private JScrollPane scrollPane; private JTextPane textPane; private DefaultHighlighter highlighter; […]

从JTextPane通过javax.swing.text.Element获取组件?

我使用JTextPane来显示字符和符号,后者由自定义绘制的JComponents表示。 例如,文本窗格可能显示如下内容: 文本窗格是用户可编辑的,允许用户通过任何位置的按钮添加更多符号,并替换所选文本。 我是通过JTextPane.insertComponent()方法完成的。 在应用程序的某个时刻,我需要知道文本窗格中当前显示的内容,并且我不仅指输入的文本,还指其中包含的确切组件。 我经历了与Positions和DocumentListeners广泛麻烦来管理我的文本窗格的内容,但是我一直造成比我解决的更多问题。 这就是为什么我最终决定,我的麻烦可能是由于我的设计错误,所以我决定看看,如果我无法通过文本窗格访问我的组件。 通过搜索AbstractDocument和其他相关类的文档和源代码,我找到了接口javax.swing.text.Element 。 然后我让我的应用程序输出 for(int i = 0; i < textPane.getDocument().getLength(); i++) { System.out.println(((StyledDocument) textPane.getDocument()).getCharacterElement(i)); } 这给了我: LeafElement(内容)0,4 LeafElement(内容)0,4 LeafElement(内容)0,4 LeafElement(内容)0,4 LeafElement(组件)4,5 LeafElement(内容)5,9 LeafElement(内容)5,9 LeafElement(内容)5,9 LeafElement(内容)5,9 LeafElement(组件)9,10 看到我所获得的LeafElements似乎有关于在Document中哪个位置显示的内容的某些信息,我认为必须能够获得该位置的实际内容。 在搜索了另外半小时后如何获得每个元素所代表的内容后,我放弃了并决定在这里发布我的问题,希望你们中的一些人可能知道如何实现这个目标! 我已经看到这个问题 ,有人试图通过textPane.getComponents()访问组件,它返回一个组件数组,其中包含JTextPane实际包含的组件的确切数量,但它们都是javax.swing.text.ComponentView$Invalidator类型javax.swing.text.ComponentView$Invalidator ,这显然对我没用。 也许我只是不知道如何从这里正确地继续,因为对我的符号的原始类型的强制转换不起作用。 TL;博士 如何获取JTextPane文本中的JComponent及其在文本窗格中的位置?

JTextPane不显示JScrollPane,也不显示文本

我需要显示链接,所以我正在使用带有setContentType的JTextPane。 但是,内容不会换行,也没有滚动。 JTextPane的内容将从RSS源返回。 这是完整的代码: import java.awt.*; import javax.swing.*; class Main extends JFrame { JFrame frame; JTabbedPane tabbedPane; JPanel home, news; public Main() { setTitle(“My Title” ); setSize( 900, 600 ); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); home(); news(); tabbedPane = new JTabbedPane(); tabbedPane.addTab( ” Home”, home ); tabbedPane.addTab( “News”, news ); JPanel framePanel = new JPanel(); framePanel.setLayout(new BorderLayout()); framePanel.add( […]

JTextPane换行

与JTextArea不同, JTextPane无法选择关闭换行。 我找到了一个解决 JTextPane的换行问题的解决方案 ,但对于这样一个简单的问题来说它似乎太冗长了。 有一个更好的方法吗?

在JTextPane中包装长单词(Java 7)

在最多6个Java的所有版本中,放置在JScrollPane中的JTextPane的默认行为是:如果可能,在字边界处换行。 如果没有,那么无论如何都要包裹它们。 在JDK 7中,默认行为似乎是:如果可能,在字边界处换行。 如果没有,只需展开JTextPane的宽度(永远不要换长字)。 很容易重现这个,这是一个SSCCE: public class WrappingTest extends JFrame { public static void main ( String[] args ) { new WrappingTest(); } public WrappingTest () { setSize(200,200); getContentPane().setLayout(new BorderLayout()); JTextPane jtp = new JTextPane(); JScrollPane jsp = new JScrollPane(jtp); jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); getContentPane().add(jsp,BorderLayout.CENTER); setVisible(true); } } 只需在JDK 6和JDK 7中运行它,写一些小字,然后写一个长字,你就会看到差异。 我的问题很简单…… JDK 7中的新默认行为完全混淆了我的程序(他们应该更加小心Oracle更改这种默认值……它们似乎不重要但是当你使用JTextPane显示时通常包含非常长的字母串的数据,它们并不是那么不重要 – 实际上我要提交错误报告,但是我想在/如果它们不解决它的情况下有一个解决方法)。 有什么方法可以回到以前的行为? […]

第2部分 – 如何在缩放JTextPane时获得一致的渲染?

我之前提交了此问题的另一个版本和示例程序: 在缩放JTextPane时如何获得一致的渲染? 重述问题:我想允许用户放大或缩小不可编辑的JTextPane。 运行在前一个问题中提交的示例程序(简单地缩放了Graphics对象),导致粗体文本和非粗体文本之间的间距不一致。 下面的示例程序尝试通过将文本窗格绘制为100%的BufferedImage然后缩放图像来解决问题。 这解决了间距不一致的问题,但结果文本缺乏清晰度。 是否有一些渲染提示(或其他一些变化)的组合将产生漂亮的清晰文本? 提前感谢对此方法可行性的任何建议或意见。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.Box; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextPane; import javax.swing.SwingUtilities; import javax.swing.text.BadLocationException; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; public class ScaledJTextPane […]