Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定用户两次单击的顺序_Java_User Interface_Event Handling_Jbutton - Fatal编程技术网

Java 确定用户两次单击的顺序

Java 确定用户两次单击的顺序,java,user-interface,event-handling,jbutton,Java,User Interface,Event Handling,Jbutton,使用者会将苏打水溅到玻璃杯之间。用户在三个可用窗口中单击的第一个按钮确定“从”初始窗口,用户在三个可用窗口中单击的第二个按钮确定“到”目标窗口 如何确定用户单击的特定两个JButton? 每次用户单击三个jbutton中的两个,我都希望将与这两个jbutton关联的字符串存储在“from”和“to”变量中 有什么方法可以做到这一点吗?制作一个ActionListener并使用JButton\addActionListener将其添加到所有三个按钮中。事件有一个可以使用的源字段 public cl

使用者会将苏打水溅到玻璃杯之间。用户在三个可用窗口中单击的第一个按钮确定“从”初始窗口,用户在三个可用窗口中单击的第二个按钮确定“到”目标窗口

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


有什么方法可以做到这一点吗?

制作一个
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
}