jslider#setLabeltable、ラベルはトラックを狭くします
質問
私は電話するときに迷惑な問題を抱えています 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();
}
});
}
}
解決
することができますように スイングコンポーネントで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'sを見つけました カスタムスイングコンポーネントの書き方 役に立った。
他のヒント
JSLiderとOverrideメソッドの独自のバージョンを作成する必要があると思います
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