The preferred JProgressBar size JProgressBar specified by the user interface delegate, BasicProgressBarUI . The example below illustrates the impact of various layout managers. FlowLayout simply uses the default UIManager , ProgressBar.horizontalSize , and GridLayout and BorderLayout.CENTER fill the available space. BoxLayout , with flanking adhesive, changes proportionally when the frame is resized.
I already use SwingWorker
Updating the GUI from the process() method of your SwingWorker should be safe. You can change layers or even remove components, but I would be afraid of something too complicated.

Addendum: Here is the corresponding default.
System.out.println(UIManager.get("ProgressBar.horizontalSize"));
javax.swing.plaf.DimensionUIResource [width = 146, height = 12]
the code:
import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.LayoutManager; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JProgressBar; public class ProgressTest { private static final Color border = Color.gray; private static void display() { JFrame f = new JFrame("ProgressTest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new GridLayout(0, 1)); f.add(createPanel(new FlowLayout())); f.add(createPanel(new GridLayout())); f.add(createPanel(new BorderLayout())); JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); p.setBorder(BorderFactory.createLineBorder(border)); JProgressBar jpb = new JProgressBar(); p.add(Box.createHorizontalGlue()); p.add(jpb); p.add(Box.createHorizontalGlue()); jpb.setIndeterminate(true); f.add(p); f.pack(); f.setSize(320, 240); f.setLocationRelativeTo(null); f.setVisible(true); } private static JPanel createPanel(LayoutManager layout) { JPanel p = new JPanel(); p.setBorder(BorderFactory.createLineBorder(border)); p.setLayout(layout); JProgressBar jpb = new JProgressBar(); jpb.setIndeterminate(true); p.add(jpb); return p; } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { display(); } }); } }
source share