#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);
}
});