Привет, я пытаюсь отобразить одну строку («Количество символов») и один динамический символ в нижней части JTextArea. Когда я запускаю этот код ниже, появляется панель, которая открывается без characterCountTitle. Только после того, как я начну печатать, отобразится символCountTitle, и число будет правильно динамическим.Область переменной AddDocumentListener при создании двух заголовков (с использованием TitledBorder) в Java Swing
Моя цель - показать 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), но это мешает области переменной.
Буду признателен за ваш ввод!
Спасибо за быстрый ответ. Я попробовал код, который вы предоставили, и отображает «Character Count:», как только панель открыта. Однако нет динамического количества символов; document.getLength() отображается как до, так и после ввода. –
@ In-youngChoung, динамическая часть работала раньше, поэтому вы, должно быть, изменили что-то еще. Мы не можем точно определить, как выполняется ваш код. Поэтому вам нужно понять это предложение и полностью его реализовать. Предложение состояло в основном в том, чтобы делать то, что вы делали раньше, но добавляете Border к панели сразу после создания панели. Тогда вам никогда не понадобится воссоздать границу, просто измените текст границы. Если вам нужна дополнительная помощь, тогда опубликуйте надлежащую [mcve], которая демонстрирует проблему, мы не можем точно догадаться, что вы изменили. – camickr
Обратите внимание, вам также может потребоваться вызвать 'repaint()' на панели после того, как текст Border изменен, чтобы обеспечить перекраску границы. – camickr