Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Swing JFrame Background is not showing

I don't know why the background color is not showing on my Jframe. Below is the code that I tried.

When I call

AnimatedDialogBox animatedDialogBox = new AnimatedDialogBox("Saving TransSet form", dataSheetTable);

Its not showing the exact color that I needed. It shows without any background color. The AnimatedDialogBox class is per below :

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
import net.miginfocom.swing.MigLayout;


public class AnimatedDialogBox {

    private JFrame progressDialog ;
    private JProgressBar bar;
    private Task task;
    private ResourceManager resourceManager = new ResourceManager();

    public AnimatedDialogBox(String message, JComponent parentComponent) {
        progressDialog = new JFrame( message);
        progressDialog.setLayout(new MigLayout());
        progressDialog.setUndecorated(true);
          progressDialog.setBackground(resourceManager.getColor("error.Panel.background")); // RGB = 243, 255, 159
        progressDialog.setPreferredSize(new Dimension(300, 100));
        JLabel label = new JLabel(message);
        label.setBackground(resourceManager.getColor("error.Panel.background"));
        progressDialog.add(label, "gapbefore 80,gapbottom 30, wrap");
        bar = new JProgressBar(0, 100);
        bar.setIndeterminate(true);
        bar.setBackground(resourceManager.getColor("error.Panel.background"));
        progressDialog.add(bar, "gapbefore 80, gapbottom 30, wrap");
        progressDialog.setFocusableWindowState(false);
        Point point = progressDialog.getLocation();
        Dimension cDim = parentComponent.getSize();

        progressDialog.setLocation((int) (cDim.getWidth() / 2)-100,
                    (int) cDim.getHeight() + 350);

        progressDialog.pack();

        task = new Task();
        task.addPropertyChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if (evt.getPropertyName().equalsIgnoreCase("progress")) {
                    int progress = task.getProgress();
                    if (progress == 0) {
                        bar.setIndeterminate(true);
                    } else {
                        bar.setIndeterminate(false);
                        bar.setValue(progress);
                        progressDialog.dispose();
                    }
                }
            }
        });
        task.execute();
        progressDialog.setVisible(true);
    }

    class Task extends SwingWorker<Void, Void> {
        private static final long SLEEP_TIME = 1000;

        public Task() {
        }

        @Override
        public Void doInBackground() {
            setProgress(0);
            try {
                Thread.sleep(SLEEP_TIME);// imitate a long-running task
            } catch (InterruptedException e) {
            }
            setProgress(100);
            return null;
        }

        @Override
        public void done() {
            Toolkit.getDefaultToolkit().beep();
        }
    }
}
like image 625
user1837394 Avatar asked Aug 15 '26 19:08

user1837394


2 Answers

The background color of a JProgressBar is determined by its UI delegate, ProgressBarUI. For example,

UIManager.put("ProgressBar.background", Color.red);

Not all implementations use the color; for example, com.apple.laf.AquaProgressBarUI ignores the setting in favor of the appearance seen here. As an alternative, you may want to consider a tinted background or Border on the enclosing panel, as suggested here.

Also note that you can update the GUI from the process() method, as shown here.

like image 80
trashgod Avatar answered Aug 17 '26 09:08

trashgod


A few ideas:

  1. You're not supposed to add components directly to a JFrame. Instead, your content should go in the "content pane". See JFrame.setContentPane(), JFrame.getContentPane(). You may want refer to the JFrame documentation or a tutorial.

  2. If a component is not opaque, then its background will not be rendered. See JComponent.setOpaque(), Component.isOpaque().

like image 20
JimN Avatar answered Aug 17 '26 10:08

JimN



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!