Java 确定用户两次单击的顺序
使用者会将苏打水溅到玻璃杯之间。用户在三个可用窗口中单击的第一个按钮确定“从”初始窗口,用户在三个可用窗口中单击的第二个按钮确定“到”目标窗口 如何确定用户单击的特定两个JButton? 每次用户单击三个jbutton中的两个,我都希望将与这两个jbutton关联的字符串存储在“from”和“to”变量中Java 确定用户两次单击的顺序,java,user-interface,event-handling,jbutton,Java,User Interface,Event Handling,Jbutton,使用者会将苏打水溅到玻璃杯之间。用户在三个可用窗口中单击的第一个按钮确定“从”初始窗口,用户在三个可用窗口中单击的第二个按钮确定“到”目标窗口 如何确定用户单击的特定两个JButton? 每次用户单击三个jbutton中的两个,我都希望将与这两个jbutton关联的字符串存储在“from”和“to”变量中 有什么方法可以做到这一点吗?制作一个ActionListener并使用JButton\addActionListener将其添加到所有三个按钮中。事件有一个可以使用的源字段 public cl
有什么方法可以做到这一点吗?制作一个
ActionListener
并使用JButton\addActionListener
将其添加到所有三个按钮中。事件有一个可以使用的源字段
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);
}
处理监听器内部的逻辑有点脏,但这就是问题所在
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);
您可以像这样向按钮添加侦听器,并使用类变量跟踪按钮被单击的次数
例如:
如果我只想创建一个名为JButtonGlassActionListener的类,并将该类的实例添加到每个JButton,请您向我展示一下实现,好吗?如上所述,但只需将侦听器的内容移动到您的新类OK,但在“\\do something”部分我该怎么做?我假设一旦您有了“from”glass和“to”glass,您希望执行一个倾倒操作或“某物”,然后重置侦听器状态我希望ShowGUI方法中的第一个和第二个变量存储移动
firstbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//do something here first button is clicked
}
} );
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
}