JLabel setText not updating text

java, jlabel, swing, user-interface

Solution

JLabel requires no repaint call. Simply calling setText(...) will change the label's text, and that is all that is required.

I wonder if your problem is a concurrency issue, that you are doing a long-running process on the Swing event thread and that this is preventing your label from updating its text.

If so, then consider doing your long-running process in a background thread such as that provided by a SwingWorker, and then updating your JLabel's text on the Swing thread, such as can be done via the SwingWorker's publish/process methods.

For more on this, please have a look at the Lesson: Concurrency in Swing tutorial.

Also Mario De... is correct about not being able to print simple new-lines on a JLabel. 1+ to his answer.

Problem

I am trying to update a JLabel by using the `setText()` method, but I can't redraw JLabel. Do I have to use the `repaint()` method to do that? Here is the part of code, I do not get any errors, but it is not updating the JLabel. ``` public void actionPerformed(ActionEvent e) { fc = new JFileChooser(); if(e.getSource() == addButton) { int returnVal = fc.showOpenDialog(Main.this); if (returnVal == JFileChooser.APPROVE_OPTION) { filesList = fc.getSelectedFiles(); setFilesList(filesList); StringBuilder logString = new StringBuilder(); logString.append("Files to Convert " + "\n"); for(int i = 0; i < getFiles().length; i++) { logString.append(filesList[i].getAbsolutePath()); } //JLabel log = new JLabel(); created above. log.setText(logString.toString()); } else { //log.append("Open command cancelled by user." + newline); } //log.setCaretPosition(log.getDocument().getLength()); } } ```

Original source