使用描述性标签调用JSlider#setLabelTable时遇到一个烦人的问题。问题是轨道(通常使用所有滑块宽度从一侧移动到另一侧)由于标签的长度而变窄。
默认情况下,滑块如下所示:
##############################################
| | | | | | | | | |
但是使用自定义标签,它看起来像这样:
############################
| | | | | | | | | |
Low priority High priority (Quick delivery)
但我想要这样的东西:
##############################################
| | | | | | | | | |
Low priority High priority (Quick delivery)
有谁知道这是否可能?恐怕这涉及到BasicSliderUI,不幸的是它不是一个选项,因为该应用程序支持多个 L&F。
这是一个显示我的问题的SSCCE :
import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.util.Dictionary;
import java.util.Hashtable;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
public class JSliderLabelTableProblem
{
public JSliderLabelTableProblem()
{
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.setBounds(new Rectangle(200, 200, 400, 200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createNormalSlider(), BorderLayout.NORTH);
frame.add(createSliderWithLabels(), BorderLayout.SOUTH);
frame.setVisible(true);
}
private JSlider createNormalSlider()
{
JSlider slider = new JSlider();
slider.setMinimum(1);
slider.setMaximum(10);
slider.setMajorTickSpacing(1);
slider.setSnapToTicks(true);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
return slider;
}
private JSlider createSliderWithLabels()
{
JSlider slider = createNormalSlider();
Dictionary<Integer, JComponent> labels = new Hashtable<Integer, JComponent>();
labels.put(1, new JLabel("Low priority"));
labels.put(10, new JLabel("High priority (Quick delivery)"));
slider.setLabelTable(labels);
return slider;
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new JSliderLabelTableProblem();
}
});
}
}