jslider#setLabeltable,标签使轨道缩小
题
打电话时我有一个烦人的问题 jslider#setLabeltable 带有描述性标签。问题在于,由于标签的长度,该轨道(通常使用所有滑块宽度从一侧到另一侧)被缩小。
默认情况下,滑块看起来像:
##############################################
| | | | | | | | | |
但是有了自定义标签,它看起来像这样:
############################
| | | | | | | | | |
Low priority High priority (Quick delivery)
但是我想要这样的东西:
##############################################
| | | | | | | | | |
Low priority High priority (Quick delivery)
有人知道这是否可能吗?恐怕这涉及 基础赛车 不幸的是,这不是一个选项,因为该应用程序支持多个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();
}
});
}
}
解决方案
尽你所能 在秋千组件中使用HTML, ,您可以尝试包装标签以使其更合适。
labels.put(1, new JLabel("<html>Low<br>priority</html>"));
labels.put(10, new JLabel("<html>High priority<br>(Quick delivery)</html>"));
附录:您还可能尝试更改标签的水平对齐。
附录:另一种方法可能是在滑块本身上使用短标签,并在附近添加一个解释性传奇。如果您必须植入自定义组件,我发现Kirill Grouchnikov的 如何编写自定义摆动组件 有帮助。
其他提示
我认为您将必须制作自己的JSlider版本和覆盖方法
public Hashtable createStandardLabels( int increment, int start )
在哪里准备更改的地方
put( new Integer ( labelIndex ), new LabelUIResource( ""+labelIndex, JLabel.CENTER ) );
根据发现的代码:
http://kickjava.com/src/javax/swing/jslider.java.htm
不隶属于 StackOverflow