2017-10-07 7 views
0
public class GlassActionListener{ 

    JButton first; 
    JButton second; 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(first == null) 
     { 
      first = (JButton) e.getSource(); 
     } 
     else 
     { 
      second = (JButton) e.getSource(); 

      // do something 

      // clean up 
      first = null; 
      second = null; 
     } 
    } 
} 

public class GUIControl { 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       showGUI(); 
      } 
     }); 
    } 

    public static void showGUI() { 

     JFrame frame = new JFrame("MyFrame"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new BorderLayout()); 

     JButton glass1 = new JButton("glass1"); 
     JButton glass2 = new JButton("glass2"); 
     JButton glass3 = new JButton("glass3"); 

     frame.getContentPane().add(glass1); 
     frame.getContentPane().add(glass2); 
     frame.getContentPane().add(glass3); 
     frame.pack(); 
     frame.setVisible(true); 

     glass1.addActionListener(??); 
     glass2.addActionListener(??); 
     glass3.addActionListener(??); 

     // I want to store the first two clicks in these variables 
     from = "glassX"; 
     to = "glassY"; 

     puzzle.move(from, to); 
    } 

L'utilisateur renversera de la soude entre les verres. Le premier JButton que l'utilisateur clique sur les trois disponibles détermine le "de" verre initial et le deuxième JButton que l'utilisateur clique sur les trois disponibles détermine le verre de destination "à".Détermination de la séquence de deux clics effectués par un utilisateur

Comment puis-je déterminer les deux JButtons spécifiques sur lesquels l'utilisateur a cliqué? Chaque fois que l'utilisateur clique sur deux JButtons sur trois, je veux stocker la chaîne associée à ces deux JButtons dans une variable "from" et "to".

Y at-il un moyen de le faire?

Répondre

1

faites un ActionListener et utilisez JButton#addActionListener pour l'ajouter aux trois boutons. L'événement a un champ source que vous pouvez utiliser. Gérer la logique à l'intérieur de l'écouteur est un peu sale, mais c'est l'idée.

+0

Pouvez-vous s'il vous plaît me montrer la mise en œuvre si je veux créer une classe simplement appelée JButtonGlassActionListener et ajouter des instances de cette classe à chaque DButton? –

+0

faites comme ci-dessus, mais déplacez simplement le contenu de l'écouteur vers votre nouvelle classe – Igor

+0

Ok mais que dois-je faire dans la partie "\\ do something"? –

0
firstbutton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    //do something here first button is clicked 
    } 
}); 

Vous pouvez ajouter des écouteurs à des boutons comme celui-ci.et utiliser une variable de classe pour suivre le nombre de clics sur les boutons.

par exemple:

public class GUIControl { 
public static void main(String[] args) { 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      showGUI(); 
     } 
    }); 
} 



public static void showGUI() { 
    JFrame frame = new JFrame("MyFrame"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new BorderLayout()); 

    JButton glass1 = new JButton("glass1"); 
    JButton glass2 = new JButton("glass2"); 
    JButton glass3 = new JButton("glass3"); 

    String from = ""; 
    String to = ""; 
    int click_count = 0; 


glass1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    if(click_count ==0) 
    { 
     from = "glassX"; 
     click_count = 1; 
    }else if(click_count ==1) 
    { 
     from = "glassY"; 
     click_count = 0; 
    } 
    } 
}); 

glass2.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    if(click_count ==0) 
    { 
     from = "glassX"; 
     click_count = 1; 
    }else if(click_count ==1) 
    { 
     from = "glassY"; 
     click_count = 0; 
    } 
    } 
}); 

glass3.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    if(click_count ==0) 
    { 
     from = "glassX"; 
     click_count = 1; 
    }else if(click_count ==1) 
    { 
     from = "glassY"; 
     click_count = 0; 
    } 
    } 
}); 

    frame.getContentPane().add(glass1); 
    frame.getContentPane().add(glass2); 
    frame.getContentPane().add(glass3); 
    frame.pack(); 
    frame.setVisible(true); 

    // I want to store the first two clicks in these variables 
}