I have a very simple JFrame
with only single JSlider
in its North Panel. I want JSlider to be displayed in minimum size by following method.
slider.putClientProperty("JComponent.sizeVariant", "mini");
but it is still displaying in its normal size. Following trick is not working too.
SwingUtilities.updateComponentTreeUI(this);
Below is a full program.
import java.awt.*;
import javax.swing.*;
public class TestSliderSize extends JFrame {
public TestSliderSize() {
setLookNFeel();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setSize(screenSize.width / 2, screenSize.height / 2);
JSlider slider = new JSlider(SwingConstants.HORIZONTAL, 0, 50, 10);
slider.putClientProperty("JComponent.sizeVariant", "mini");
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
//SwingUtilities.updateComponentTreeUI(this);
getContentPane().setLayout(new BorderLayout());
JPanel centerPanel = new JPanel(new BorderLayout());
JPanel northPanel = new JPanel(new FlowLayout());
Dimension d1 = centerPanel.getSize();
northPanel.setPreferredSize(new Dimension(screenSize.width / 2, 100));
northPanel.add(slider);
northPanel.setBackground(Color.BLACK);
centerPanel.add(northPanel, BorderLayout.NORTH);
JPanel innerPanel = new JPanel();
innerPanel.setBackground(Color.ORANGE);
centerPanel.add(innerPanel, BorderLayout.CENTER);
SwingUtilities.updateComponentTreeUI(this);
getContentPane().add(centerPanel, BorderLayout.CENTER);
this.setVisible(true);
}
public static void main(String[] args) {
new TestSliderSize();
}
private void setLookNFeel() {
try { // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e1) {
}
}
}
Now I want help in displying the slider in minimum size.