Jslider Beschriftung

Marcel_Handball

Bekanntes Mitglied
Hi,

ich platziere mit dem GridBagLayout vier JSlider untereinander, die jeweils einen unterschiedlichen Wertebereich haben.
Ich möchte den minimalen und maximalen Wert beschriften lassen. Wenn ich dies allerdings folgendermaßen machen, verändert sich die Größe des Sliders:

jslider.jpg



Java:
k_slider = new JSlider(1000, 100000);
k_slider.setMajorTickSpacing(99000);
k_slider.setPaintLabels(true);

Gibt es eine Möglichkeit dies zu unterbinden?
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
Hier ein Würgaraund:
Java:
/* (@)LabeledSliderTestGui.java */

/* Copyright 2010 Sebastian Haufe

 * Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

 * Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius;

import java.awt.Component;
import java.awt.GridLayout;
import java.util.Dictionary;
import java.util.Enumeration;

import javax.swing.*;
import javax.swing.border.Border;

public class LabeledSliderTestGui {

  @SuppressWarnings("unchecked")
  private static int calculateTrackIndent(JSlider slider) {
    int labelInset = 0;
    final Dictionary labelTable;
    if (slider.getPaintLabels()
          && slider.getOrientation() == JSlider.HORIZONTAL
          && (labelTable = slider.getLabelTable()) != null) {
      final Enumeration labels = labelTable.elements();
      final Component first =
            !labels.hasMoreElements() ? null : (Component) labels
                  .nextElement();
      Component last = first;
      while (labels.hasMoreElements()) {
        last = (Component) labels.nextElement();
      }
      final int firstWidth = first == null ? 0 : first.getWidth();
      final int lastWidth = last == null ? 0 : last.getWidth();
      labelInset = Math.max(firstWidth, lastWidth) / 2;
    }
    return labelInset;
  }

  private static int calculateMaximumTrackIndent(JSlider... sliders) {
    int result = 0;
    for (JSlider slider : sliders) {
      result = Math.max(result, calculateTrackIndent(slider));
    }

    return result;
  }

  private static void setIndentingBorders(JSlider... sliders) {
    final int maxIndent = calculateMaximumTrackIndent(sliders);
    for (JSlider slider : sliders) {
      final int myIndent = calculateTrackIndent(slider);
      final Border indentingBorder =
            BorderFactory.createEmptyBorder(0, maxIndent - myIndent, 0,
                  maxIndent - myIndent);
      final Border sliderBorder = slider.getBorder();
      if (sliderBorder != null) {
        slider.setBorder(BorderFactory.createCompoundBorder(indentingBorder,
              sliderBorder));
      } else {
        slider.setBorder(indentingBorder);
      }
    }
  }

  private static void createAndShowGui() {
    final JSlider slider = new JSlider(-10, 10, 0);
    slider.setMajorTickSpacing(10);
    slider.setPaintLabels(true);
    slider.setPaintTicks(true);
    slider.setPaintTrack(true);

    final JSlider slider2 = new JSlider(-10000, 10000, 0);
    slider2.setMajorTickSpacing(10000);
    slider2.setPaintLabels(true);
    slider2.setPaintTicks(true);
    slider2.setPaintTrack(true);

    setIndentingBorders(slider, slider2);

    final JPanel contentPane = new JPanel(new GridLayout(0, 1, 6, 6));
    contentPane.add(slider);
    contentPane.add(slider2);

    final JFrame f = new JFrame("Test Frame: LabeledSliderTestGui"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

      public void run() {
        createAndShowGui();
      }
    });
  }
}
Ebenius
 

Ebenius

Top Contributor
Man muss (vielleicht) dazu sagen, dass das gegen jedes Look and Feel sich da anders verhalten kann. Dieser Workaround funktioniert mit dem Metal L&F. Sollte eigentlich mit jedem BasicSliderUI-Derivat gehen, aber da kann ich mich auch täuschen. Also ordentlich testen! :-D

Happy Hacking!
Ebenius
 

Ebenius

Top Contributor
Marco, das Problem ist, dass die Sliders die Labels zentriert an ihren Tick setzen. Je länger der Text des ersten und letzten Labels, desto weiter wird der Abstand zwischen dem Rand des Tracks und dem Rand des JSliders. Die Breite der Sliders im Eingangsbeitrag ist exakt gleich. Der TO möchte aber, dass die Tracks genau gleich breit werden.

Ebenius
 

Marco13

Top Contributor
Ahso... Ich dachte es geht um die Höhe, aber stimmt: Dass die Breite sich ändert ist nicht so schön (auch wenn's mir nicht aufgefallen ist...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G beschriftung von JSlider AWT, Swing, JavaFX & SWT 7
L JSlider Beschriftung AWT, Swing, JavaFX & SWT 1
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
D Swing JSlider Tip Anzahl AWT, Swing, JavaFX & SWT 3
J JSlider sichtbar AWT, Swing, JavaFX & SWT 7
J Swing JSlider - Form des Reglers AWT, Swing, JavaFX & SWT 6
J JSlider Color Ticks AWT, Swing, JavaFX & SWT 1
J JSlider - MajorTick AWT, Swing, JavaFX & SWT 0
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
A Slider (JSlider?) AWT, Swing, JavaFX & SWT 7
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
A Swing JSlider erscheint doppelt AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
A Swing Bestimmte Werte anzeigen JSlider() AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
M JSlider-Wert ändern, ohne ein ChangeEvent auszulösen AWT, Swing, JavaFX & SWT 4
C Aussehen von JSlider ändern AWT, Swing, JavaFX & SWT 7
D Swing jSlider soll selber weiterwandern, je nach zeit der musik AWT, Swing, JavaFX & SWT 5
D JSlider und Textfeld AWT, Swing, JavaFX & SWT 2
C Swing Tickspacing in JSlider AWT, Swing, JavaFX & SWT 3
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
Y JSlider Wert auslesen (Kategorien) AWT, Swing, JavaFX & SWT 2
T jSlider-Value als Float in jLabel ausgeben AWT, Swing, JavaFX & SWT 2
O Swing JSlider mit doppelter Value AWT, Swing, JavaFX & SWT 6
F JSlider Design ändern AWT, Swing, JavaFX & SWT 6
D Swing JSlider AWT, Swing, JavaFX & SWT 11
B JSlider - Wert am Mouszeiger anzeigen lassen AWT, Swing, JavaFX & SWT 6
E JSlider synchron halten AWT, Swing, JavaFX & SWT 4
J Swing jSlider nur auf bestimmte werte beschränken AWT, Swing, JavaFX & SWT 15
X Audio Player: Fenster mit Play/Stop-Button erstellen, mit JSlider Lautstärke ändern AWT, Swing, JavaFX & SWT 6
R JSlider AWT, Swing, JavaFX & SWT 9
M Swing JSlider, Popup-Box AWT, Swing, JavaFX & SWT 3
J JSlider mit Double Werten AWT, Swing, JavaFX & SWT 5
J JSlider auf JTextPane? AWT, Swing, JavaFX & SWT 2
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
E jSlider und ChangeListener AWT, Swing, JavaFX & SWT 2
S JSlider Track Breite und Farbe AWT, Swing, JavaFX & SWT 2
T Swing JSlider und Adjustment-Listener wollen nicht so recht AWT, Swing, JavaFX & SWT 2
O JSlider - wie unterscheide ich mit Maus verändert und durch setValue verändert. AWT, Swing, JavaFX & SWT 16
T JSlider: ChangeListener löst dreimal aus? AWT, Swing, JavaFX & SWT 4
B JSlider in JCombobox AWT, Swing, JavaFX & SWT 9
J JSlider wird nicht neugezeichnet AWT, Swing, JavaFX & SWT 8
J Einen JSlider ähnlich wie in OO3 AWT, Swing, JavaFX & SWT 5
G JSlider in Applet AWT, Swing, JavaFX & SWT 4
K Unterschiedliches Aussehen der JSlider? AWT, Swing, JavaFX & SWT 4
I Listener für einen JSlider AWT, Swing, JavaFX & SWT 1
H JSlider mit 2 Werten AWT, Swing, JavaFX & SWT 7
A JSlider umdrehen AWT, Swing, JavaFX & SWT 15
D JSlider und JMF player verbinden AWT, Swing, JavaFX & SWT 6
J JSlider regaiert unter Java 1.6 nicht mehr AWT, Swing, JavaFX & SWT 7
N JSlider: Kosmetik - snapToTicks AWT, Swing, JavaFX & SWT 3
T JComponents abändern/modifizieren z.b. JSlider AWT, Swing, JavaFX & SWT 2
N Nicht linearer JSlider! AWT, Swing, JavaFX & SWT 4
T JSlider getValue() erst nach dem Loslassen des Mauszeigers AWT, Swing, JavaFX & SWT 3
Z JSlider-Knob wenden AWT, Swing, JavaFX & SWT 8
L JSlider stumm geworden? AWT, Swing, JavaFX & SWT 2
I JSlider - klick ignorieren AWT, Swing, JavaFX & SWT 4
I JSlider-Schieberegler AWT, Swing, JavaFX & SWT 7
T JSlider Schiebereglerbild ändern AWT, Swing, JavaFX & SWT 4
U JSlider - Probleme bei der Darstellung AWT, Swing, JavaFX & SWT 3
H ChangeListener für JSlider AWT, Swing, JavaFX & SWT 6
P JSlider automatisch bewegen AWT, Swing, JavaFX & SWT 3
G JSlider AWT, Swing, JavaFX & SWT 2
CptK Point2D.Double Kurven - Beschriftung und richtiges Anklicken AWT, Swing, JavaFX & SWT 7
T JButton Beschriftung AWT, Swing, JavaFX & SWT 12
Z kleine JButtons und ihre Beschriftung AWT, Swing, JavaFX & SWT 5
R TitledBorder: Beschriftung am senkrechten Rand AWT, Swing, JavaFX & SWT 3
J Menü beschriftung wird nicht verändert AWT, Swing, JavaFX & SWT 7
S Beschriftung von Buttons AWT, Swing, JavaFX & SWT 9
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
T JTree: Beschriftung der Zellen AWT, Swing, JavaFX & SWT 3
J Beschriftung vom JButton per UIManager ändern AWT, Swing, JavaFX & SWT 2
P JButton 20x20 Beschriftung AWT, Swing, JavaFX & SWT 2
F mehrzeilige Button-Beschriftung AWT, Swing, JavaFX & SWT 5
S List mit mehrfarbiger Beschriftung AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben