Search code examples
javaswingjpaneljslidernull-layout-manager

JSlider not drawing on null layout JPanel


I have a JPanel that has a null layout and I'm trying to add a JSlider:

        slider = new JSlider();


        slider.setSize(300,30);
        slider.setPreferredSize(new Dimension(300,30));
        int x = (Constants.getScreenWidth()/2)-(slider.getWidth()/2);
        int y = (Constants.getScreenHeight()/2)-(slider.getHeight()/2);
        y = y - 100;
        slider.setLocation(x,y);
        slider.setBounds(x-(slider.getWidth()/2),y-(slider.getHeight()/2),300,30);


        add(slider);

however the slider is not showing up. I've printed the slider and it is:

javax.swing.JSlider[,420,320,300x30,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=288,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=300,height=30],isInverted=false,majorTickSpacing=0,minorTickSpacing=0,orientation=HORIZONTAL,paintLabels=false,paintTicks=false,paintTrack=true,snapToTicks=false,snapToValue=true]

why can't I see the slider?


Solution

    • remove slider.setLayout(null); you have set for setLayout(null); its parent in this case JPanel.setLayout(null);

    • disclaimer never use AbsoluteLayout for placing JComponent to the Container

    I'm able to display JSlider without code line

    int x = (Constants.getScreenWidth()/2)-(slider.getWidth()/2);
    int y = (Constants.getScreenHeight()/2)-(slider.getHeight()/2);
    y = y - 100;
    slider.setLocation(x,y);
    slider.setBounds(x-(slider.getWidth()/2),y-(slider.getHeight()/2),300,30);
    
    • place JComponent to the Container by using Insets

    this code showed JSlider on the screen

    import javax.swing.*;
    import java.awt.*;
    
    public class NullLayoutManagerWithJSlider extends JFrame {
    
        private JFrame frame = new JFrame();
        private static final long serialVersionUID = 1L;
    
        public NullLayoutManagerWithJSlider() {
            JSlider slider = new JSlider();
            slider.setPreferredSize(new Dimension(300, 30));        
            frame.setLayout(null);
            frame.add(slider);
    
            Insets mmInsets = frame.getInsets();
            Dimension sizeMmInn = null;
            slider.setPreferredSize(new Dimension(300, 30));
            sizeMmInn = slider.getPreferredSize();
            slider.setBounds(20 + mmInsets.left, 16 + mmInsets.top, sizeMmInn.width, sizeMmInn.height);
    
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocation(100, 100);
            frame.setSize(new Dimension(600, 400));
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    NullLayoutManagerWithJSlider cf = new NullLayoutManagerWithJSlider();
                }
            });
        }
    }