2017-05-16 1 views
0

Supposons que l'utilisateur ait choisi des stations-service. Le cadre changera et l'utilisateur pourra choisir un emplacement et la liste des stations-service à cet endroit apparaîtra sous la liste déroulante.L'action JComboBox ne fonctionne pas

J'ai donc essayé d'ajouter un autre écouteur d'action à l'intérieur de l'instruction if, en utilisant un autre sinon if et j'ai également essayé des instructions switch mais les deux ne montreront pas la sortie. Alors, comment puis-je résoudre ce problème? Merci d'avance.

Ceci est la version abrégée de mon code avant d'ajouter la 2ème action auditeur

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Testing5 { 
private JFrame frame1, frame2; 
private ActionListener action, action2; 
private JButton PetrolStations, back, Foods; 
private JComboBox locationChooser; 
final static String[] location = {"Petaling Jaya", "Port Klang", "Kuala Lumpur"}; 

public void HELPMEGUI() { 

    frame1 = new JFrame("Frame 1"); 
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

    JPanel contentPanel = new JPanel(new GridLayout(5,2)); 

    PetrolStations = new JButton ("PetrolStations"); 
    Foods = new JButton ("Foods");  
    back = new JButton ("Back"); 

    locationChooser = new JComboBox(location); 

    action = new ActionListener() { 
     public void actionPerformed(ActionEvent ae) { 
      JButton button = (JButton) ae.getSource();   

      if (button == PetrolStations) { 
       frame2 = new JFrame("FRAME 2"); 
       frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
       frame2.add(locationChooser, BorderLayout.NORTH); 
       frame2.add(back, BorderLayout.SOUTH); 

       frame2.setSize(300, 300); 
       frame2.setLocationRelativeTo(null); 
       frame2.setVisible(true); 
       frame1.setVisible(false); 

      } 

      else if (button == Foods) { 
       frame2 = new JFrame("FRAME 2"); 
       frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
       frame2.add(locationChooser, BorderLayout.NORTH); 
       frame2.add(back, BorderLayout.SOUTH); 

       frame2.setSize(300, 300); 
       frame2.setLocationRelativeTo(null); 
       frame2.setVisible(true); 
       frame1.setVisible(false); 

      } 

      else if (button == back) { 
       frame1.setVisible(true); 
       frame2.setVisible(false); 
       frame2.dispose(); 
      } 
     } 
    }; 

    PetrolStations.addActionListener(action); 
    Foods.addActionListener(action); 
    back.addActionListener(action); 
    locationChooser.addActionListener(action2); 

    contentPanel.add(PetrolStations); 
    contentPanel.add(Foods); 

    frame1.getContentPane().add(contentPanel); 
    frame1.setSize(640, 400); 
    frame1.setVisible(true); 
    frame1.setLocationRelativeTo(null); 

} 

public static void main(String...args) { 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      new Testing5().HELPMEGUI(); 
     } 
    }); 
} 

} 

EDIT:

C'est ce que j'ai essayé de faire

action2 = new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         JComboBox locationSelected = (JComboBox) e.getSource(); 

         if (locationSelected == Kuala Lumpur) { 
          System.out.println("Address 1"); 
         } 
        } 
       }; 

2n d essayer

action2 = new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
        int temp; 

        if(e.getSource() == locationChooser) { 
         temp = locationChooser.getSelectedIndex(); 

         switch (temp) { 
         case 0: System.out.println("Address 1"); break; 
         case 1: System.out.println("Address 2"); break; 
         } 
        } 
        } 
        };} 
+1

'action2' est jamais initialisées (il est' null') – MadProgrammer

+0

@MadProgrammer Ce code avant ajouté la nouvelle action – Farhan

+1

Eh bien, ce fut unhelp – MadProgrammer

Répondre

0

Vous ne montrez pas le contexte de la définition de votre auditeur d'action, donc je pense que vous pourriez avoir au mauvais endroit. Voici comment je l'ai fait, et il semble fonctionner:

PetrolStations.addActionListener(action); 
    Foods.addActionListener(action); 
    back.addActionListener(action); 
    action2 = new ActionListener() { 
     public void actionPerformed(ActionEvent e) 
     { 
      int temp; 

      if (e.getSource() == locationChooser) { 
       temp = locationChooser.getSelectedIndex(); 

       switch (temp) { 
        case 0: 
         System.out.println("Address 1"); 
         break; 
        case 1: 
         System.out.println("Address 2"); 
         break; 
       } 
      } 
     } 
    }; 
    locationChooser.addActionListener(action2); 
+0

Je suis désolé si je n'ai pas déclaré cela sur la question, je vais modifier. Mais ce code est le code avant que j'ajoute le 2ème écouteur d'action à l'intérieur du 1er écouteur d'action – Farhan

+0

Montrez-moi ce deuxième écouteur d'action et je verrai si j'ai une meilleure réponse pour vous ... –

+0

J'ai ajouté deux ensembles de codes que j'ai essayé – Farhan