2016-12-21 11 views
0

Привет, я пытаюсь отобразить одну строку («Количество символов») и один динамический символ в нижней части 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), но это мешает области переменной.

Буду признателен за ваш ввод!

ответ

3

Вы можете просто создать и добавить границу за пределами 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); 
} 
+0

Спасибо за быстрый ответ. Я попробовал код, который вы предоставили, и отображает «Character Count:», как только панель открыта. Однако нет динамического количества символов; document.getLength() отображается как до, так и после ввода. –

+1

@ In-youngChoung, динамическая часть работала раньше, поэтому вы, должно быть, изменили что-то еще. Мы не можем точно определить, как выполняется ваш код. Поэтому вам нужно понять это предложение и полностью его реализовать. Предложение состояло в основном в том, чтобы делать то, что вы делали раньше, но добавляете Border к панели сразу после создания панели. Тогда вам никогда не понадобится воссоздать границу, просто измените текст границы. Если вам нужна дополнительная помощь, тогда опубликуйте надлежащую [mcve], которая демонстрирует проблему, мы не можем точно догадаться, что вы изменили. – camickr

+1

Обратите внимание, вам также может потребоваться вызвать 'repaint()' на панели после того, как текст Border изменен, чтобы обеспечить перекраску границы. – camickr

 Смежные вопросы

  • Нет связанных вопросов^_^