Очистка JTextArea, установка нового текста

#java #arraylist #jtextarea

#java #список массивов #jtextarea

Вопрос:

Итак, у меня есть этот фрагмент программного обеспечения, которое я пишу.

В настоящее время этот фрагмент выводит все элементы, которые у меня есть в моем ArrayList (корзина).

 JButton btnShowCart = new JButton("Show cart");
    btnShowCart.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            for (int i = 0; i < listWithItems.size(); i  ) {
                txtBasket.setText(txtBasket.getText()   listWithItems.get(i)    "n" );     
            }

        }
    });
 

Всякий раз, когда я нажимаю «показать корзину», я вижу, что содержит мой список. Это идеально, но я хочу, чтобы он очистил текст до того, как JTextArea снова установит текст из моего ArrayList, иначе я тоже увижу старый текст. Возможно ли это как-то? Я попробовал repaint(), но это не помогло. Я также попробовал setText(«»), но из-за этого я просто не смог отобразить какой-либо текст вообще, хотя я пытался поместить setText («») до / после того, как я установил текст с помощью моего arraylist.

Ответ №1:

вы не должны вызывать txtBasket.getText() в цикле, так как каждый раз вы будете получать предыдущий текст.

попробуйте что-то вроде этого :

 JButton btnShowCart = new JButton("Show cart");
    btnShowCart.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            String content = "";
            for (int i = 0; i < listWithItems.size(); i  ) {
                content  = listWithItems.get(i)    "n" ;     
            }
            txtBasket.setText(content);
        }
    });
 

Комментарии:

1. Ах, это сработало! Спасибо. Теперь я вижу, что мне не следовало помещать getText() внутри цикла. Отличное объяснение @felix.

Ответ №2:

Если это JAVA / SWING, возможно, вам нужно вызвать SwingUtilities следующим образом:

 String text = "";
for (int i = 0; i < listWithItems.size(); i  ) {
        text  = txtBasket.getText()   listWithItems.get(i)    "n";   
}
// update GUI    
SwingUtilities.invokeLater(new Runnable() {
        public void run() {
                statusLabel.setText(text);
        }
});