JSlider et ChangeListener

Résolu
Senjinsama Messages postés 2 Date d'inscription samedi 26 août 2017 Statut Membre Dernière intervention 26 août 2017 - 26 août 2017 à 15:50
Senjinsama Messages postés 2 Date d'inscription samedi 26 août 2017 Statut Membre Dernière intervention 26 août 2017 - 26 août 2017 à 16:20
Bonjour à tous,

J'ai commencé cette semaine à travailler sur Swing et les interfaces graphiques, et j'essaie de réaliser un convertisseur "Km/Miles" avec un JSlider, qui changerait en temps réel la valeur de la distance en km (soit qui démarre de 0, soit indiqué à la main dans un JTextField), et la distance en miles (avec la conversion mathématique qui va bien ^^).
J'ai un souci avec ChangeListener.
package com.mycompany.convertisseurkmmilesv2;

import java.awt.Dimension;
import java.awt.GridLayout;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;


public class Fenetre extends JFrame implements ChangeListener{

private JPanel panPrinc;
private JPanel panKm;
private JPanel panMiles;

private JSlider sliderKm;

private JTextField valeurKm;

private JLabel labelKm;
private JLabel conversionMiles;
private JLabel labelMiles;

int valeur = 0;

public Fenetre()
{
// JFrame
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Convertisseur Km en Miles");
this.setLocationRelativeTo(null);

// Panel principal
panPrinc = new JPanel(new GridLayout(2,1));

// Panel Km
panKm = new JPanel();
panKm.setBorder(BorderFactory.createTitledBorder("Distance en kilomètres"));
valeurKm = new JTextField();
valeurKm.setPreferredSize(new Dimension(50,30));
labelKm = new JLabel("km");
sliderKm = new JSlider(JSlider.HORIZONTAL,0,100,0);
sliderKm.setMajorTickSpacing(10);
sliderKm.setMinorTickSpacing(1);
sliderKm.setPaintLabels(true);
sliderKm.setPaintTicks(true);
panKm.add(valeurKm);
panKm.add(labelKm);
panKm.add(sliderKm);

// panel Miles
panMiles = new JPanel();
panMiles.setBorder(BorderFactory.createTitledBorder("conversion en miles"));
conversionMiles = new JLabel();
labelMiles = new JLabel("miles");
labelMiles.setOpaque(true);
panMiles.add(conversionMiles);
panMiles.add(labelMiles);

// ChangeListener du slider


// les panels
panPrinc.add(panKm);
panPrinc.add(panMiles);

// JFrame
this.setContentPane(panPrinc);
this.setVisible(true);
}

@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}


Comme vous pouvez le constater, la méthode "implémentée" par le ChangeListener ne correspond en rien avec ce que j'ai pu lire sur différents site, notamment celui d'Oracle, à savoir stateChanged(ChangeEvent e).
bien évidemment, en le modifiant, ça me fait des erreurs.
Que faire ? est-ce normal ?

PS : pour information, j'ai une autre classe Main, où je ne fais qu'appeler l'objet Fenetre, afin de lancer l'appli.

Bien à vous, ami(e)s développeur(euse)s.

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
26 août 2017 à 16:04
Bonjour,

Historiquement pour faire des interfaces graphiques en Java il y a eu AWT (en Java 1), Swing (en Java 2) puis Java FX (en Java 8).

Pour des raisons de compatibilité avec les anciens programmes il est encore possible de faire du AWT/Swing mais aujourd'hui les nouveaux programmes devraient plutôt être fait en Java FX.

Regarde tes imports, tu as du java.awt, du javax.swing et du javafx, c'est de ce mélange que vient ton problème, car le ChangeListener dont tu as besoin c'est celui de Swing, mais tu as importé celui de Java FX.

Voici les bons imports :

import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
0
Senjinsama Messages postés 2 Date d'inscription samedi 26 août 2017 Statut Membre Dernière intervention 26 août 2017
26 août 2017 à 16:20
Ahah !!! je ne fais jamais attention à ce que j'importe : ALT+Entrée et le rouge disparait... ça m'apprendra !!! xD
Une erreur de débutant résolue !!! ;)

Merci beaucoup, KX :)
0
Rejoignez-nous