java - Java Swing 中创建两个标题(使用 TitledBorder)时 AddDocumentListener 的变量作用域

标签 java swing character jtextarea documentlistener

您好,我正在尝试在 JTextArea 底部显示一个字符串(“字符数:”)和一个动态字符数。 当我运行下面的代码时,会打开一个没有characterCountTitle的面板。仅当我开始输入时,characterCountTitle 才会显示,并且数字是正确的动态数字。

我的目标是在面板向用户开放后立即显示characterCountTitle(字符串+字符数)。

private void initComponents() {
    this.notePanel.getNoteDocument().addDocumentListener(new DocumentListener() {

        TitledBorder characterCountTitle;
        Border emptyBorder;

        public void insertUpdate(DocumentEvent e) {
            displayEditInfo(e);
        }

        public void removeUpdate(DocumentEvent e) {
            displayEditInfo(e);
        }

        public void changedUpdate(DocumentEvent e) {
            displayEditInfo(e);
        }

        private void displayEditInfo(DocumentEvent e) {
            Document document = e.getDocument();

            emptyBorder = BorderFactory.createEmptyBorder();

            //displays a string of "Character Count: " and another string of dynamic character count 
            characterCountTitle = BorderFactory.createTitledBorder(emptyBorder, "Character Count: " +  document.getLength());
            characterCountTitle.setTitlePosition(TitledBorder.BOTTOM);
            panel.setBorder(characterCountTitle);
        }
    });

    this.panel.add(notePanel, BorderLayout.CENTER);
    this.panel.add(navigation.buildPanel(), BorderLayout.SOUTH);
}

由于这个问题,我试图创建两个标题;一个用于字符串(在 addDocumentListener 之外),一个用于字符计数(在 displayEditInfo 方法内),但它弄乱了变量范围。

非常感谢您的意见!

最佳答案

您可以简单地在 DocumentListener 之外创建并添加边框,然后更改文档事件的标题文本:

private void initComponents() {


        Border emptyBorder = BorderFactory.createEmptyBorder();
        final TitledBorder characterCountTitle = BorderFactory.createTitledBorder(emptyBorder, "Character Count:");
        characterCountTitle.setTitlePosition(TitledBorder.BOTTOM);
        panel.setBorder(characterCountTitle);

        this.notePanel.getNoteDocument().addDocumentListener(new DocumentListener()                 {

        public void insertUpdate(DocumentEvent e) {
            displayEditInfo(e);
        }

        public void removeUpdate(DocumentEvent e) {
            displayEditInfo(e);
        }

        public void changedUpdate(DocumentEvent e) {
            displayEditInfo(e);
        }

        private void displayEditInfo(DocumentEvent e) {
            Document document = e.getDocument();


            //displays a string and dynamic character count
            characterCountTitle.setTitle("Character Count: " +  document.getLength());
            panel.repaint();

        }
    });

    this.panel.add(notePanel, BorderLayout.CENTER);
    this.panel.add(navigation.buildPanel(), BorderLayout.SOUTH);
}

关于java - Java Swing 中创建两个标题(使用 TitledBorder)时 AddDocumentListener 的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41266266/

相关文章:

java - 使用canvas向JFrame添加其他组件

java - 如何在 AsyncTask 中生成 TextView - PostExecute

java - Spring 批处理 MapJobRepositoryFactoryBean

java - 如何从正则表达式中的模式匹配中排除某些字符?

arrays - 使用sizeof将字符附加到字符串形式用户的末尾

Java计算字符串字符个数的方法

使用指针更改字符数组的字符

java - 是否可以设置内部交换来将消息发送到队列(如果存在)?

java - 为什么我的 JOptionPane 消息不起作用?

java - JWindow 上的 JPanel,添加组件