您好,我正在尝试在 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/