2016-04-05 16 views
1

Ich versuche, ein JSlider ein JLabel in Echtzeit zu aktualisieren, aber es kommt nur mit Fehlern. Hier ist mein Code so weit:Verwenden Sie JSlider, um JLabel in Echtzeit zu aktualisieren

slider.addChangeListener(new ChangeListener() { 
    public void stateChanged() { 
     label.setText(String.valueOf(slider.getValue())); 
    } 
}); 

Kann jemand sehen, wo ich falsch gelaufen bin? Danke,

+0

'„? Kann jemand sehen, wo ich falsch gegangen sind“' - scheint es nichts falsch mit dem Code zu sein, die Sie gebucht haben, was darauf hindeutet, dass der Fehler liegt woanders. Wenn Sie noch Hilfe benötigen, verbessern Sie die Frage, indem Sie eine [mcve] erstellen und veröffentlichen. Wir wollen nicht Ihr gesamtes Programm sehen, sondern Sie sollten Ihren Code in das kleinste Bit, das noch kompiliert, zusammenfassen, keinen zusätzlichen Code haben, der für Ihr Problem nicht relevant ist, aber Ihr Problem immer noch demonstriert. Sie können das Problem sehr gut lösen, indem Sie einfach versuchen, den Fehler zu isolieren und zu entlarven. –

+0

Veröffentlichen Sie auch alle Fehlermeldungen, die möglicherweise auftreten. –

Antwort

1

Ich lag falsch, es gibt einen sehr grundlegenden Fehler in Ihrem Code: Ihre stateChanged-Methode ist falsch, da es einen ChangeEvent-Parameter erfordert. Ändern

public void stateChanged() { 

zu

public void stateChanged(ChangeEvent e) { 

Der Compiler Fehlermeldung all dies zu Ihnen sagen sollte, und in der Zukunft, werden Sie diese Nachrichten kritisch lesen möchten, wie sie Sie viel Kummer sparen wenn Sie tun.

Zum Beispiel:

import java.awt.BorderLayout; 
import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class SliderFoo extends JPanel { 
    private JSlider slider = new JSlider(0, 100, 50); 
    private JLabel label = new JLabel(" ", SwingConstants.CENTER); 

    public SliderFoo() { 
     slider.addChangeListener(new ChangeListener() { 
      @Override 
      public void stateChanged(ChangeEvent e) { 
       label.setText(String.valueOf(slider.getValue())); 
      } 
     }); 

     slider.setMajorTickSpacing(20); 
     slider.setMinorTickSpacing(5); 
     slider.setPaintTicks(true); 
     slider.setPaintLabels(true); 

     JPanel topPanel = new JPanel(); 
     topPanel.add(new JLabel("Slider Value:")); 
     topPanel.add(label); 

     setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     setLayout(new BorderLayout(5, 5)); 
     add(topPanel, BorderLayout.PAGE_START); 
     add(slider); 
    } 

    private static void createAndShowGui() { 
     SliderFoo mainPanel = new SliderFoo(); 

     JFrame frame = new JFrame("SliderFoo"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      createAndShowGui(); 
     }); 
    } 
} 
+0

Ja, es funktioniert jetzt !! Vielen Dank! – Tia