2017-10-07 83 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); 
    } 

用户会在眼镜之间溅出苏打水。用户点击三个可用的第一个JButton决定了“from”初始玻璃,第二个JButton用户从三个可用的点击中确定了“to”目标玻璃。确定用户所做的两次点击的顺序

如何确定用户点击的特定两个JButton? 每次用户点击三个JButton中的两个,我想将与这两个JButton关联的字符串存储在“from”和“to”变量中。

有没有办法做到这一点?

回答

1

使ActionListener和使用JButton#addActionListener将其添加到所有三个按钮。该活动有一个可用的来源字段。

ActionListener listener = new ActionListener() { 
    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; 
     } 
    } 
}; 


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

处理监听器内部的逻辑有点脏,但这就是主意。

+0

能否请你告诉我执行,如果我只想创建一个名为JButtonGlassActionListener一个类,并添加这个类的实例,以每个JButton的? –

+0

如上所述,但只是将听众的内容移动到新班级 – Igor

+0

好的,但是我应该怎样做“\\做些事情”? –

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

您可以将侦听器添加到像this这样的按钮,并使用类变量来跟踪按钮被点击的次数。

如:

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 
}