标签: jtextpane

JTextPane同步样式选择UI问题

我正在用Java开发一个简单的WYSIWYG RTF编辑器并且有一个小问题.我需要能够将样式选择切换按钮(例如粗体,斜体,下划线)与用户文本选择同步.例如,如果当前的文本选择是平原,没有被选择的粗体,斜体和下划线的切换按钮,但是当用户选择一些文字,是粗体和下划线,粗体和下划线的切换按钮被选择.

现在我很确定能JTextPane.getInputAttributes()获得我想要的选择属性但是在监听插入更新事件时存在问题.问题是附加到的插入符号监听器JTextPane似乎在输入属性发生更改后被调用.所以选择总是落后一步.也就是说,我必须在切换按钮更新之前选择文本两次!

这里重要的代码是:

textPane.addCaretListener(new CaretListener() {

        @Override
        public void caretUpdate(CaretEvent e) {
            syncAttributesWithUI(textPane.getInputAttributes());
        }
    });
Run Code Online (Sandbox Code Playgroud)

和:

private void syncAttributesWithUI(AttributeSet attributes) {
    boldButton.setSelected(StyleConstants.isBold(attributes));
    italicButton.setSelected(StyleConstants.isItalic(attributes));
    underlineButton.setSelected(StyleConstants.isUnderline(attributes));
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

java user-interface swing jtextpane

5
推荐指数
1
解决办法
808
查看次数

JTextPane不可变文本块

我一直在创建类似文本编辑器的东西,并注意到NetBeans中一个有趣的功能:从模板创建Java应用程序(例如,"桌面应用程序")时,它会创建不可变的代码块(它们可供查看但是它们不能直接修改).

此镜头应使上述所有文字清晰:

在此输入图像描述

那么,问题是:如何使用JTextPane实现这样的功能?

java swing netbeans jtextpane

5
推荐指数
1
解决办法
503
查看次数

在JTextPane中取消选择所选文本

我有一个编辑器,我想检查所选文本是否包含一些单词.如果它包含那些特定的单词,那么我需要取消选择用户所做的选择.有没有办法做到这一点JTextPane

java swing jtextpane

5
推荐指数
3
解决办法
3741
查看次数

哪个侦听器可以知道JTextPane值已更改?

我想知道JTextPane内容何时发生变化.我实现了一个键盘监听器,但它只检测键盘事件.如果用户通过鼠标粘贴文本或将文本拖入内部,那么我不会启用检测JTextPane值的更改.哪个事件监听器可以告诉我JTextPane值已更改?

java events swing jtextpane

5
推荐指数
1
解决办法
4740
查看次数

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( tabbedPane, BorderLayout.CENTER );
        getContentPane().add( framePanel );     

    }


    public void home() 
    {       
        home = new JPanel();
        // some stuffs here
    }


    public void news()
    {
        news = new JPanel(); …
Run Code Online (Sandbox Code Playgroud)

java swing jtextpane

5
推荐指数
1
解决办法
3549
查看次数

如何在JTextPane中为文本和下划线设置不同的颜色?

只是试图为JTextPane中的文本着色 - 但问题是文本和下划线不能有不同的颜色.我该怎么办?或者甚至可能吗?下面的示例打印所有文本并以红色下划线.

JTextPane pane = new JTextPane();

StyleContext context = new StyleContext();

Style style = pane.addStyle("Black", null);
StyleConstants.setAlignment(style, StyleConstants.ALIGN_RIGHT);
StyleConstants.setFontSize(style, 14);
StyleConstants.setSpaceAbove(style, 4);
StyleConstants.setSpaceBelow(style, 4);
StyleConstants.setForeground(style, Color.BLACK);

StyledDocument document = pane.getStyledDocument();


style = pane.addStyle("Red Underline", style);
StyleConstants.setForeground(style, Color.RED);
StyleConstants.setUnderline(style, true);

pane.getDocument().insertString(0,  "Test String", style);
Run Code Online (Sandbox Code Playgroud)

java swing highlighting jtextpane

5
推荐指数
2
解决办法
4986
查看次数

如何创建与jTextPane连接的Log4j 2 appender?

我正在尝试Log4j 2登录JTextPane.它应该像Netbeans IDE控制台中的STDERR或STDOUT(包括文本样式 - 颜色).

我知道我需要创建一个appender并连接它JTextPane,但我不知道它是如何使用的Log4j 2.

你有什么建议吗?

我感谢你的帮助,marty

jtextpane appender log4j2

5
推荐指数
1
解决办法
921
查看次数

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

我使用a JTextPane来显示字符和符号,后者由自定义绘制表示JComponents.例如,文本窗格可能显示如下内容: 在此输入图像描述 文本窗格是用户可编辑的,允许用户通过任何位置的按钮添加更多符号,并替换所选文本.我是通过这种JTextPane.insertComponent()方法做到的.在应用程序的某个时刻,我需要知道文本窗格中当前显示的内容,并且我不仅指输入的文本,还指其中包含的确切组件.

我经历了广泛的麻烦PositionsDocumentListeners管理我的文本窗格的内容,但我一直造成比我解决的问题更多的问题.这就是为什么我最终决定,我的麻烦可能是由于我的设计错误,所以我决定看看,如果我无法通过文本窗格访问我的组件.

通过搜索文档和源代码AbstractDocument以及其他相关类,我找到了界面javax.swing.text.Element.然后我让我的应用程序输出

for(int i = 0; i < textPane.getDocument().getLength(); i++) {
    System.out.println(((StyledDocument) textPane.getDocument()).getCharacterElement(i));
}
Run Code Online (Sandbox Code Playgroud)

这给了我:

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,这显然对我没用.也许我只是不知道如何从这里正确地继续,因为对我的符号的原始类型的强制转换不起作用.

TL;博士

如何从文本窗格中获取a JComponent,它位于文本内部JTextPane及其位置?

java swing element jtextpane jcomponent

5
推荐指数
1
解决办法
2198
查看次数

语法 - 使用SwingWorker在JTextPane中突出显示

我试图在JTextPane中进行文本突出显示.我正在使用SwingWorker在后台进行突出显示.但我无法得到理想的输出.
我的代码如下:
主类:

class MultiColor {
    private static void displayGUI() {
        final JTextPane ta = new JTextPane();
        JFrame frame = new JFrame("EXAMPLE");
        JButton jb = new JButton("Change");
        JScrollPane jsp = new JScrollPane(ta);
        frame.add(jsp, BorderLayout.CENTER);
        frame.add(jb, BorderLayout.PAGE_END);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                Modify mm = new Modify(ta);
                mm.execute();
            }
        });
    }
    public static void main(String[] a) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                displayGUI();
            } …
Run Code Online (Sandbox Code Playgroud)

java swing jtextpane

5
推荐指数
1
解决办法
1536
查看次数

调整具有固定宽度的长句的对话框消息(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)) {
            doc.insertString(doc.getLength(), " Hello Java World ", new SimpleAttributeSet());
            SimpleAttributeSet attrs = new SimpleAttributeSet();
            StyleConstants.setUnderline(attrs, true);
            StyleConstants.setForeground(attrs, Color.BLUE);
            String text = "www.google.com";
            URL url = …
Run Code Online (Sandbox Code Playgroud)

java swing resize jtextpane joptionpane

5
推荐指数
1
解决办法
1万
查看次数