Valeurs de Jcombobox pour graphique

Fermé
Newbie - Modifié par baladur13 le 9/01/2016 à 14:59
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 - 16 janv. 2016 à 15:02
Bonjour,

Je cherche à utiliser des valeurs de Jcombobox pour faire un graphique. Mon problème est que tant que je n'ai pas additionné la Jcombobox au Jpanel je ne peux récupérer la valeur pour faire le graphique dans le même Jpanel. Pour l'instant, je cherche à mettre des valeurs de graduations sur l'axe des abscisses à partir de la Jcombobox (qui donne l'échelle choisie). Comment faire?
Voici le programme:
public class DeriveGenetique1 {

 public DeriveGenetique1() {
  JFrame frame = new JFrame("Derive genetique");
  frame.setPreferredSize(new Dimension(700, 700));
  frame.setLocation(100, 0);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel A = new JPanel() {

   int largeur = 500;
   int hauteur = 500;
   // coordonnes
   int x0 = 100;
   int y0 = hauteur - 20;
   int x1 = largeur - 20;
   int y1 = 100;

   public void paintComponent(Graphics g) {

    // cadre
    g.setColor(Color.orange);
    g.fillRect(x0, y1, x1 - x0, y0 - y1);
    g.setColor(Color.DARK_GRAY);
    // ordonnee
    g.drawLine(x0, y0, x0, y1);
    // abscisse
    g.drawLine(x0, y0, x1, y0);
    // subdivision ordonnee
    int b = 0;
    // titre axe
    g.drawString("frequence allele", x0 - 20, y1 - 5);
    for (int i = 0; i < y0 - y1 + 10; i = i + (y0 - y1) / 10) {
     g.drawLine(x0, y0 - i, x0 + 10, y0 - i);
     // graduations
     String a = Double.toString((double) b / 10);
     g.drawString(a, x0 - 20, y0 - i + 5);
     b += 1;
    }
    // subdivision abscisse
    // titre axe
    g.drawString("nb generations", x1 + 20, y0 + 5);
    for (int i = 0; i < x1 - x0 + 10; i = i + (x1 - x0) / 10) {
     g.drawLine(x0 + i, y0, x0 + i, y0 - 10);
    }
    /* echelle graduee des axes */

   }

  };

  JButton lancer = new JButton("Lancer");
  JButton RaZ = new JButton("effacer");
  // combobox
  Double[] items0 = { 0.1, 0.5, 0.9 };
  final JComboBox<Double> probabilite = new JComboBox<Double>(items0);
  Integer[] items1 = { 10, 25, 50, 100, 250, 1000 };
  final JComboBox<Integer> population = new JComboBox<Integer>(items1);
  Integer[] items2 = { 50, 100, 250, 1000, 2500 };
  final JComboBox<Integer> generations = new JComboBox<Integer>(items2);
  // choix par defaut
  probabilite.setSelectedIndex(1);
  population.setSelectedIndex(1);
  generations.setSelectedIndex(1);
  // ecouteurs combobox
  /* probabilité alleles */
  ActionListener ValeurProba = new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    double d = (double) probabilite.getSelectedItem();
   }
  };
  probabilite.addActionListener(ValeurProba);
  /* population */
  ActionListener ValeurPopulation = new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    int i = (int) (population.getSelectedItem());

   }
  };
  population.addActionListener(ValeurPopulation);
  /* population */
  ActionListener ValeurGeneration = new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    int i = (int) (generations.getSelectedItem());
   }
  };
  generations.addActionListener(ValeurGeneration);


  // JLabel
  JLabel proba = new JLabel("frequence allelique");
  JLabel pop = new JLabel("effectifs");
  JLabel gen = new JLabel("generations");

  // inclusions
  A.add(proba, BorderLayout.NORTH);
  A.add(probabilite, BorderLayout.NORTH);
  A.add(pop, BorderLayout.NORTH);
  A.add(population, BorderLayout.NORTH);
  A.add(gen, BorderLayout.NORTH);
  A.add(generations, BorderLayout.NORTH);
  A.add(lancer, BorderLayout.NORTH);
  A.add(RaZ, BorderLayout.NORTH);

  frame.add(A);
  frame.pack();
  frame.setVisible(true);
 }

 public static void main(String[] args) {
  // TODO Stub de la méthode généré automatiquement
  DeriveGenetique1 test = new DeriveGenetique1();
 }

}


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
16 janv. 2016 à 15:02
Bonjour,

Vous pouvez tenter plusieurs solutions, à titre d'exemple :
1. Tenter de commencer par une valeur par défaut en se basant sur le tableau "items" qui contient les valeur de la JComboBox, j'ai vu que vous mettez toujours le premier élément comme étant la valeur par défaut.
2. Réorganiser votre code :
Le JPanel A utilise une méthode paintCompenent différente, alors pourquoi ne pas le déclarer dans une classe séparer avec un "extends JPanel" et ajouter des méthode pour la mise à jour qui modifie les valeur et redessine le composant ?
Les valeurs par défaut peuvent être passées comme des paramètres pour le constructeur contrairement au constructeur par de la classe JPanel.

Bon Courage.
0