Slider Wert anzeigen

JimBeam

Mitglied
Hallo,
ich habe ein kleines Interface mit Slidern. Nun will ich, weil man es sonst nicht gut erkennt, den Wert über der Maus anzeigen lassen. Ich habe bisher folgendes:
Java:
final JLabel label1 = new JLabel("Wert: ");
      
        label1.setBorder(LineBorder.createBlackLineBorder());
        label1.setOpaque(true);
        label1.setBackground(Color.orange);

        int maxSize = label1.getFontMetrics(label1.getFont()).stringWidth("Wert: " + Slider1.getMaximum() + " ");
      
        label1.setBounds(10, 20, maxSize, 20);
        label1.setVisible(false);     
      
        Slider1.addMouseMotionListener(new MouseAdapter()
        {
            @Override
            public void mouseDragged(MouseEvent e)
            {

                label1.setLocation(e.getX(), Slider1.getY() + Slider1.getHeight() + 1);
                label1.setText("Wert: " + Slider1.getValue());
                label1.setVisible(true);
            };
        });
        Slider1.addMouseListener(new MouseAdapter()
        {@Override
            public void mouseReleased(MouseEvent e)
            {
                label1.setVisible(false);
            }
        });


Es wird allerdings nichts angezeigt was kann ich tun.
 
Zuletzt bearbeitet von einem Moderator:

krgewb

Top Contributor
Du kannst Tooltips verwenden. Bei mir war es so:
Java:
       meinSlider.setToolTipText("Huhu");
 

krgewb

Top Contributor
Es tut mir Leid. Ich hatte dich falsch verstanden.

Dieses Programm zeigt den Wert von dem Slider in einem JLabel an:

Java:
import java.awt.*;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MeinPanel extends JPanel {
   private static final long serialVersionUID = 1L;
   private MeinChangeListener mein_change_listener;
   private JLabel label_fuer_temperatur;

   // Konstruktor
   public MeinPanel() {

       mein_change_listener = new MeinChangeListener(this);

       JSlider slider_fuer_temperatur = new JSlider(-100, 100);

       // Kleiner Strich zwischen in langen Strichen in 10 Grad-Abständen
       slider_fuer_temperatur.setMinorTickSpacing(10);

       // Striche darstellen
       slider_fuer_temperatur.setPaintTicks(true);

       // Ziffern darstellen
       slider_fuer_temperatur.setPaintLabels(true);

       // Voreinstellung 0 Grad Celsuis
       slider_fuer_temperatur.setValue(0);

       // Langer Strich alle 50 Grad
       slider_fuer_temperatur.setMajorTickSpacing(50);

       // ChangeListener registrieren.
       slider_fuer_temperatur.addChangeListener(mein_change_listener);

       // JSlider haben keinen ActionCommand. Stattdessen kann man einen Namen
       // setzen.
       slider_fuer_temperatur.setName("slider_fuer_temperatur");

       this.add(slider_fuer_temperatur);

       label_fuer_temperatur = new JLabel("0");
       this.add(label_fuer_temperatur);

       this.setVisible(true);

   }

   // Text vom Label aendern
   public void setLabelText(int wert) {
       label_fuer_temperatur.setText("" + wert);
   }

}

/**
 * Der ChangeListener für den Slider.
 *
 */
class MeinChangeListener implements ChangeListener {

   MeinPanel dasPanel;

   // Konstruktor
   public MeinChangeListener(MeinPanel dasPanel) {
       this.dasPanel = dasPanel;
   }

   @Override
   public void stateChanged(ChangeEvent e) {

       JSlider slider = (JSlider) e.getSource();

       int wert = slider.getValue();

       if (slider.getName().equals("slider_fuer_temperatur")) {
           dasPanel.setLabelText(wert);
       }

   }

}

class Hauptprogramm {

   public static void main(String[] args) {

       JFrame frame = new JFrame();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setSize(new Dimension(800, 400));
       frame.setTitle("Test");
       frame.setLayout(new BorderLayout());

       MeinPanel panel = new MeinPanel();
       frame.setContentPane(panel);
       frame.setVisible(true);

   }

}
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Dann hast du aber noch nicht verstanden warum er Dir das verbietet. Das trifft nämlich auf JPanel in dem Fall genauso zu wie auf jede andere Klasse die es gibt ebenfalls :)

Man erbt nur wenn man die Klasse erweitert oder in ihrer Funktionalität verändert. Nicht wenn man sie einfach nur benutzt. Dein MeinPanel könnte genauso gut ein Instanzvariable JPanel haben die du benutzt.

Gruß

Claus
 

krgewb

Top Contributor
Wenn ich es so mache kommt ein Fehlermeldung.
Java:
import java.awt.*;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Hauptprogramm {
    private static MeinChangeListener mein_change_listener;
    private static JLabel label_fuer_temperatur;

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(800, 400));
        frame.setTitle("Test");
        frame.setLayout(new BorderLayout());

        JPanel panel = new JPanel();
        frame.setContentPane(panel);
        frame.setVisible(true);

        mein_change_listener = new MeinChangeListener(this);

        JSlider slider_fuer_temperatur = new JSlider(-100, 100);

        // Kleiner Strich zwischen in langen Strichen in 10 Grad-Abständen
        slider_fuer_temperatur.setMinorTickSpacing(10);

        // Striche darstellen
        slider_fuer_temperatur.setPaintTicks(true);

        // Ziffern darstellen
        slider_fuer_temperatur.setPaintLabels(true);

        // Voreinstellung 0 Grad Celsuis
        slider_fuer_temperatur.setValue(0);

        // Langer Strich alle 50 Grad
        slider_fuer_temperatur.setMajorTickSpacing(50);

        // ChangeListener registrieren.
        slider_fuer_temperatur.addChangeListener(mein_change_listener);

        // JSlider haben keinen ActionCommand. Stattdessen kann man einen Namen
        // setzen.
        slider_fuer_temperatur.setName("slider_fuer_temperatur");

        panel.add(slider_fuer_temperatur);

        label_fuer_temperatur = new JLabel("0");
        panel.add(label_fuer_temperatur);

        frame.setVisible(true);
    }

    // Text vom Label aendern
    public void setLabelText(int wert) {
        label_fuer_temperatur.setText("" + wert);
    }

}

/**
 * Der ChangeListener für den Slider.
 *
 */
class MeinChangeListener implements ChangeListener {

    Hauptprogramm haupt;

    // Konstruktor
    public MeinChangeListener(Hauptprogramm haupt) {
        this.haupt = haupt;
    }

    @Override
    public void stateChanged(ChangeEvent e) {

        JSlider slider = (JSlider) e.getSource();

        int wert = slider.getValue();

        if (slider.getName().equals("slider_fuer_temperatur")) {
            haupt.setLabelText(wert);
        }

    }

}

Der Fehler ist in der Zeile
Java:
mein_change_listener = new MeinChangeListener(this);
Das Wort this ist rot unterstrichen. Die Meldung lautet: Cannot use this in a static context
 

JStein52

Top Contributor
Weil jetzt plötzlich mein_change_listener static ist. Und wenn wir schon beim erlauben und verbieten sind:
meinChangeListener wäre der bessere Name dafür. ;);)
 
X

Xyz1

Gast
Hier ist mal ein (für @Flown negatives) Beispiel, was man alles mit JSlider anstellen kann:
Java:
import java.awt.GridLayout;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.ToolTipManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class JSLDemo extends JFrame implements ChangeListener {

    public static void main(String[] args) {
        JSLDemo jslDemo = new JSLDemo();
    }

    private JSlider[] jss = {
        new JSlider(JSlider.HORIZONTAL, -30, +30, +0),
        new JSlider(JSlider.HORIZONTAL, -30, +30, +0)};
    private JLabel jl = new JLabel("", JLabel.CENTER);

    public JSLDemo() {
        setTitle("JSLDemo");
        setLayout(new GridLayout(3, 1));
        for (JSlider js : jss) {
            js.setMajorTickSpacing(10);
            js.setMinorTickSpacing(1);
            js.setPaintLabels(true);
            js.setPaintTicks(true);
            js.setPaintTrack(true);
            add(js);
        }
        add(jl);

        jss[0].addChangeListener(this);
        ToolTipManager.sharedInstance().setInitialDelay(0);

        pack();
        setSize(800, 168);
        setDefaultCloseOperation(2);
        setVisible(true);
    }

    @Override
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();
        if (!source.getValueIsAdjusting()) {
            jl.setText("Temperatur ist: " + source.getValue());
            jss[1].setValue(-source.getValue());
        } else {
            source.setToolTipText(source.getValue() + " °C");
//            KeyEvent ke = new KeyEvent(source, KeyEvent.KEY_PRESSED,
//                    System.currentTimeMillis(), InputEvent.CTRL_MASK,
//                    KeyEvent.VK_F1, KeyEvent.CHAR_UNDEFINED);
//            source.dispatchEvent(ke);
        }
    }
}

jsld1.PNG

Ich hab nachgeschaut, die einzige Möglichkeit, Tooltip immer sichtbar zu machen, ist: das Delay zu ändern und/oder ein KeyEvent auszulösen. Beides nicht so toll.

Was hattest du eigentlich mal vor?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Slider-Wert an anderen Slider übergeben AWT, Swing, JavaFX & SWT 5
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
J Swing Slider AWT, Swing, JavaFX & SWT 11
S JavaFX Slider freezt nach Benutzung AWT, Swing, JavaFX & SWT 3
G JavaFX Slider in JavaFX beide Seiten beschriften AWT, Swing, JavaFX & SWT 2
S Swing Customised Slider AWT, Swing, JavaFX & SWT 2
C Slider für Zeitauswahl AWT, Swing, JavaFX & SWT 3
P JavaFX Slider soll Value erst ab einer bestimmten Bedinung aendern AWT, Swing, JavaFX & SWT 19
L ComboBox: slider positionieren AWT, Swing, JavaFX & SWT 0
H org.eclipse.swt.Slider ohne Buttons AWT, Swing, JavaFX & SWT 1
H org.eclipse.swt.widgets.Slider und negative Werte AWT, Swing, JavaFX & SWT 3
H SWT - DataBinding - observerMax für Slider AWT, Swing, JavaFX & SWT 1
G 2D-Slider bzw. eine graphische Auswahlkomponente die sich so verhält AWT, Swing, JavaFX & SWT 6
A Slider (JSlider?) AWT, Swing, JavaFX & SWT 7
B runder Slider AWT, Swing, JavaFX & SWT 3
A Swing Slider-Value auslesen und weitergeben AWT, Swing, JavaFX & SWT 4
D Audio Player Progress Slider nicht flüssig AWT, Swing, JavaFX & SWT 2
Semox Swing Slider mit Value Auswertung wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
O Verbesserungfrage zu einem MP3Player Slider - Ebenius kannst du helfen bitte ? AWT, Swing, JavaFX & SWT 10
G Slider, der naja schwer zu sagen. AWT, Swing, JavaFX & SWT 15
M slider soll keine zwischenwerte annehmen AWT, Swing, JavaFX & SWT 2
_user_q ThreadPool schedule Wert auf false setzen AWT, Swing, JavaFX & SWT 1
S ChoiceBox aus ArrayList per setValue() mit Wert belegen funktioniert nicht. AWT, Swing, JavaFX & SWT 0
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
L Swing Wert vom Textfield in Array List hinzufügen AWT, Swing, JavaFX & SWT 2
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
S hashCode int wert AWT, Swing, JavaFX & SWT 6
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
S Caps-Lock Überprüfung gibt falschen Wert zurück AWT, Swing, JavaFX & SWT 1
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
Hatsi09 JCombobox default wert AWT, Swing, JavaFX & SWT 6
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
B AWT GUI nimmt nur 19 Ziffern an, obwohl Max Wert von Double größer ist AWT, Swing, JavaFX & SWT 7
B JavaFX JavaFX Table gespeichertes Wert auswählen/anvisieren AWT, Swing, JavaFX & SWT 3
K Swing DefaultListModel braucht zu lange, um Wert zu setzen AWT, Swing, JavaFX & SWT 7
T JavaFX Falscher Wert getLayoutBounds? + Tipps zum Code-Aufbau? AWT, Swing, JavaFX & SWT 8
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
G JavaFX TableView Wert in Spalte ändern AWT, Swing, JavaFX & SWT 0
L ComboBox Wert automatisch auswählen AWT, Swing, JavaFX & SWT 6
C JavaFX mit .setText() befülltes Textfield liefert anschließend mit .getText() den ursprünglichen Wert? AWT, Swing, JavaFX & SWT 1
M JavaFX berechneten Wert in TableView schreiben AWT, Swing, JavaFX & SWT 1
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
M Event Handling vertical ValueProperty() alter Wert gleich neuer Wert AWT, Swing, JavaFX & SWT 4
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
R JavaFX Wert einer ChoiceBox bekommen ohne Lambdas AWT, Swing, JavaFX & SWT 11
M JavaFX Wert aus Tabellenzelle auslesen AWT, Swing, JavaFX & SWT 4
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
W JTextfield - Wert lässt sich nicht setzen AWT, Swing, JavaFX & SWT 3
A Unterklasse schreibt Wert in JFrame AWT, Swing, JavaFX & SWT 4
M SWT CCombo immer so groß wie der größte Wert! AWT, Swing, JavaFX & SWT 0
T Int-Wert aktualisieren? AWT, Swing, JavaFX & SWT 9
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
M Swing Alter Wert von einer Variable wird verwendet AWT, Swing, JavaFX & SWT 8
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
M JSlider-Wert ändern, ohne ein ChangeEvent auszulösen AWT, Swing, JavaFX & SWT 4
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
A Ermittelter Wert auf Formular übertragen. AWT, Swing, JavaFX & SWT 2
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
E Wert eines selektierten Knotens in einem JTree auslesen AWT, Swing, JavaFX & SWT 3
N Button Wert zuweisen AWT, Swing, JavaFX & SWT 3
Y JSlider Wert auslesen (Kategorien) AWT, Swing, JavaFX & SWT 2
R JFreeChart: nur jeden n-ten Wert auf der X-Achse anzeigen AWT, Swing, JavaFX & SWT 5
L Swing Falscher Wert nach eigener Sortierung (JTable) AWT, Swing, JavaFX & SWT 2
N jcomboBox anderer Wert als Anzeige AWT, Swing, JavaFX & SWT 6
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
R Zeile in JTable anhand von Wert einfärben AWT, Swing, JavaFX & SWT 2
C Zwei JSpinner mit dem gleichen Wert AWT, Swing, JavaFX & SWT 2
C Swing JTable: edit Cell -> versteckten Wert ändern AWT, Swing, JavaFX & SWT 12
B JSlider - Wert am Mouszeiger anzeigen lassen AWT, Swing, JavaFX & SWT 6
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
P Combobox liesst falschen Wert AWT, Swing, JavaFX & SWT 10
S Frame - Panel - Dialog rückgabe wert AWT, Swing, JavaFX & SWT 5
M SWT DateTime per default null Wert ? AWT, Swing, JavaFX & SWT 3
L ArrayList Wert löschen klappt nicht AWT, Swing, JavaFX & SWT 11
C jtable hintegrundfarbe integer wert AWT, Swing, JavaFX & SWT 14
S Swing noch nicht übergebenen Wert aus JComboBox auslesen AWT, Swing, JavaFX & SWT 4
S JTable Wert so bekommen wie er angezeigt wird..? AWT, Swing, JavaFX & SWT 2
I Swing JComboBox Wert setzen AWT, Swing, JavaFX & SWT 4
S Swing In JComboBox Wert und ID integrieren AWT, Swing, JavaFX & SWT 16
M Swing JTextFeld Wert in anderer Klasse aufrufen AWT, Swing, JavaFX & SWT 13
G JTable - bei falscher Eingabe wird alter Wert genommen. AWT, Swing, JavaFX & SWT 2
P Bei JComboBox einem Eintrag Wert zuweisen AWT, Swing, JavaFX & SWT 7
A Wert einer JComboBox auslesen AWT, Swing, JavaFX & SWT 1
B JTable Wert in Vector einlesen AWT, Swing, JavaFX & SWT 4
G JComboBox - Anzeige mit Wert verknüpfen AWT, Swing, JavaFX & SWT 3
V Start Button und Wert Eingabe in ein Fenster AWT, Swing, JavaFX & SWT 2
L JTree Frage -> nur den Wert des Knotens ausgeben? AWT, Swing, JavaFX & SWT 2
L Jcombobox + value Wert AWT, Swing, JavaFX & SWT 7
M Wert von einem Fenster zum anderen übergeben AWT, Swing, JavaFX & SWT 3
J Problem mit Alpha-Wert beim Button AWT, Swing, JavaFX & SWT 3
S JTextField. Bei Abbruch vorherigen Wert wiederherstellen AWT, Swing, JavaFX & SWT 2
D Wert von Kasse2 an Klasse1 übergeben AWT, Swing, JavaFX & SWT 3
D Scrollbalken Wert setzen AWT, Swing, JavaFX & SWT 6
S Eingegeben Wert wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
S Methoden return wert? AWT, Swing, JavaFX & SWT 7
O MouseListener - Wert-Übergabe AWT, Swing, JavaFX & SWT 3
G JRadioButton beim deselektieren Wert ändern. AWT, Swing, JavaFX & SWT 2
M JTextField auslesen und Wert vergleichen? AWT, Swing, JavaFX & SWT 2
W JTextfield aktualisieren / Wert aus Datenbank neu abfragen AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben