请考虑以下代码。
import edu.cmu.ri.createlab.terk.robot.finch.Finch;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class RobotControl extends JFrame {
public static void main (String args[]) {
RobotControl GUI = new RobotControl(); //GUI is the name of my object.
GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GUI.setSize(300,300);
GUI.setVisible(true);
GUI.setTitle("RobotControl");
}
private JButton foward;
public RobotControl() { //constructor
setLayout (new FlowLayout());
foward = new JButton("foward");
add(foward);
ActionListener e = new event();
foward.addActionListener(e);
}
public class event implements ActionListener {
public void actionPerformed1(ActionEvent e){
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
}
现在考虑以下代码,让我的雀科机器人向前移动10秒钟。
Finch myf = new Finch();
myf.setWheelVelocities(255, 255, 10000);
现在,我的问题是,是否可以从第一段代码中单击GUI上创建的foward按钮来执行第二段代码?如果是这样我将如何去做。我已经尝试将finch代码放入actionListener类但没有任何反应。我哪里错了。我需要建议。
答案 0 :(得分:2)
以下是示例代码:
-------------------------
RobotControl.java
myrobot = new Finch();
foward = new JButton("foward");
add(foward);
forward.addActionListener(new ForwardButtonListener(myrobot));
-------------------------
ForwardButtonListener.java
public class ForwardButtonListener implements ActionListener {
Finch robotToControl;
public FowardButtonListener(Finch aRobot) {
robotToControl = aRobot;
}
public void actionPerformed (ActionEvent e) {
robotToControl.setWheelVelocities(255, 255, 10000);
}
}
-------------------------
答案 1 :(得分:0)
简短的回答是,是的。
首先,您需要将Finch
的实例维护为实例变量...
public class RobotControl extends JFrame {
private Finch finch;
//...
}
您需要创建Finch
...
public RobotControl {
finch = new Finch();
}
然后在ActionListener
中,您需要与Finch
public void actionPerformed1(ActionEvent e){
myf.setWheelVelocities(255, 255, 10000);
}
答案很长,很可能你必须按顺序发出多个命令,问题就在于,这个过程可能会阻止事件调度线程,阻止响应新的传入事件并使其看起来像就像你的申请已“停止”
虽然有多种方法可以缓解此问题,但如果您不需要Finch
与UI进行通信(例如电机的报告状态等),您可以简单地使用单线程{{ 1}}某种,只需通过它发出一系列命令。
如果您需要向客户端UI提供反馈,事情会变得更加复杂......