打电话时我有一个烦人的问题 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top