Swing JSlider Tip Anzahl

Hallo zusammen,
ich habe eine Frage zu dem JSlider.
Ich erstelle einen JSlider mit einem Wert von 0 bis 10000.
Java:
slidergroeße.setMinimum(0);
slidergroeße.setMaximum(10000);
Desweiteren füge ich Abstände zu meinem Slider hinzu.
Java:
slidergroeße.setMajorTickSpacing(1000); // <== ??
slidergroeße.setSnapToTicks(true);
slidergroeße.setPaintTicks(true);
slidergroeße.setPaintTicks(true);
Hier ist das Problem.
Ich möchte nur eine bestimmte Anzahl an Tips haben, nämlich 5.
5 Tips mit 5 unterschiedlichen Werten. Nur diese 5 Tips sollen im Slider angezeigt werden.
Tip 1 : 0
Tip 2 : 10
Tip 3 : 100
Tip 4 : 1000
Tip 5 : 10000
Wie lässt sich dies realisieren ?
Mit Hashtable habe ich es bereits erfolglos versucht.
Vielleicht habt ihr eine Idee.

In diesem Sinne Vielen Dank im Voraus und einen schönen Restabend

-DjangoDieMango
 
So ganz verstehe ich das nicht.

Willst du letztendlich einen Slider bei dem du nur diese 5 werte auswählen kannst? Wenn ja, dann solltest du das anders lösen und einen Spider von 1-5 machen und einfach den Wert 10^Sliderwert verwenden

Gruß

Claus
 
HashTable ist der Richtige Ansatz.

Mach dir am besten eine eigene (innere) Klasse, die von JSlider erbt. Dort kannst du dann eine HashMap mit deinen Werten angeben, diese mittels der Methode setLabels dem Slider übergeben.
Hier mal ein kleines Beispiel: (Hoffe es funktioniert so, wie du es willst 😛 )


Java:
public class SliderExample {

public static void createAndShowGUI()
    {
        JFrame frame = new JFrame("Slider");
        frame.setSize(500, 120);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        final SteppingSlider steppingSlider = new SteppingSlider();

    
        frame.getContentPane().setLayout(
                new BoxLayout(frame.getContentPane(),
                        BoxLayout.Y_AXIS)); 
        frame.getContentPane().add(steppingSlider);
        frame.setVisible(true);
    }

    public static void main(String[] args) throws Exception
    {
        createAndShowGUI();
    }

    public static class SteppingSlider extends JSlider
    {
        // Werte deines Sliders
        private static final Integer[] VALUES = { 0, 10, 100, 1000 };
        private static final Hashtable<Integer, JLabel> LABELS = new Hashtable<>();
       // Werte in die HashMap schreiben.
        static
        {
            for(int i = 0; i < VALUES.length; ++i)
            {
                LABELS.put(i, new JLabel(VALUES[i].toString()));
            }
        }

        public SteppingSlider()
        {
            super(0, VALUES.length - 1, 0);
            setLabelTable(LABELS);   
            setPaintTicks(true);
            setPaintLabels(true);
            setSnapToTicks(true);
            setMajorTickSpacing(1);
        }

         // je nach tick gibt die Methode den enstprechenden Wert zurück
        public int getDomainValue()
        {
            return VALUES[getValue()];
        }
    }
}

PS: Der eig. Key ist eig. die methode snapToTicks(true); Dadurch hat der user nicht die Möglichkeit, zwischen den Ticks hin und her zu springen sondern wird zu dem jeweiligen (am nähsten dran liegenden) Tick geforced.

Gruß
Robert
 
Hallo ihr beiden,
Vielen Dank für eure Hilfe!
Durch eure Denkanstöße habe ich einen Lösungsweg gefunden.

Für die Leute die ein ähnliches Problem haben, hier meine Lösung:
Java:
        sliderZahlengroeße.setMinimum(1);
        sliderZahlengroeße.setMaximum(5);
        sliderZahlengroeße.setMajorTickSpacing(1);
        sliderZahlengroeße.setSnapToTicks(true);
        sliderZahlengroeße.setPaintTicks(true);
        Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel>();
        table.put(1, new JLabel("1er"));
        table.put(2, new JLabel("10er"));
        table.put(3, new JLabel("100er"));
        table.put(4, new JLabel("1000er"));
        table.put(5, new JLabel("10000er"));
        sliderZahlengroeße.setLabelTable(table);
        sliderZahlengroeße.setPaintLabels(true);

In diesem Sinne schönen Resttag
-DjangoDieMango
 

Neue Themen


Zurück
Oben