Java chekbox上的事件
我正在Java chekbox上的事件,java,swing,checkbox,Java,Swing,Checkbox,我正在swing中开发一个Java接口编码,我使用了一个复选框。 我希望当我点击复选框时,它会产生一个连续的事件(因为在这个事件中,我会产生一个纬线,并将其发送给微控制器),但我不知道怎么做。 我试图制作一个ActionListener,但它只执行了一次操作 谁能帮我 以下是我尝试的代码: checkbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEven
swing
中开发一个Java接口编码,我使用了一个复选框。
我希望当我点击复选框时,它会产生一个连续的事件(因为在这个事件中,我会产生一个纬线,并将其发送给微控制器),但我不知道怎么做。
我试图制作一个ActionListener
,但它只执行了一次操作
谁能帮我
以下是我尝试的代码:
checkbox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// ------------------------------------------------------------|
// Déclaration des variables de la trame de la liaison
// montante|
// -----------------------------------------------------------|
float capGPS = -30;
float longi = 30;
float lat = 50;
float h = 50;
float capM = 50;
float V = 50;
float R = 50;
float Tsurvol = 50;
float Dist = 45;
float phiE = -30;
float thetaE = 30;
float psiE = 45;
float psiScan = 30;
float TfCam = 0;
String strRealFR = thetafld.getText();
float thetaCam = Float.valueOf(strRealFR);
float psiCam = Float.valueOf(psifld.getText());
byte[] length = new byte[1];
length[0] = 7;
byte[] typeMission = new byte[1];
typeMission[0] = 1;
// -----------------------------------------------------|
// Initialisation du tableau d'octets contenant la
// trame|
// ----------------------------------------------------|
byte[] trame = new byte[0];
trame = Tools.concatenateByteArrays(trame,
"$".getBytes());// StarFlag
trame = Tools.concatenateByteArrays(trame,
"!".getBytes());// Flag Nav
trame = Tools.concatenateByteArrays(trame,
"M".getBytes());// Mémorisation
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(capGPS));// CapGPS
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(longi));// Longitude
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(lat));// Latitude
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(h));// Altitude
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(capM));// Cap
// Magnétque
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(V));// Vitesse
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(R));// Rayon de
// révolution
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(Tsurvol));// Temps de
// survol
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(Dist));// Distance
trame = Tools.concatenateByteArrays(trame,
"Rt".getBytes());// Retour au point initial
trame = Tools.concatenateByteArrays(trame,
"§".getBytes());// flag attitude
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(phiE));// Angle de
// roulis
trame = Tools.concatenateByteArrays(trame, typeMission);// Type
// de
// mission
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(thetaE));// Angle de
// tangage
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(psiE));// Angle de
// lacet
trame = Tools.concatenateByteArrays(trame,
"#".getBytes());// mode de fonctionnement
trame = Tools.concatenateByteArrays(trame,
"o".getBytes());// Marche/Arret
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(-thetaCam));// Tangage
// caméra
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(psiCam));// Angle de
// lacet
// caméra
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(psiScan));// vitesse
// de
// balayage
// caméra
trame = Tools.concatenateByteArrays(trame,
Tools.convertSingleToBytes(TfCam));// tems de
// fonctionnement
// de la
// caméra
trame = Tools.concatenateByteArrays(trame,
"*".getBytes());// fin de trame
try {
if (port != null) {
fluxEcriture.write(trame);
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
} // fin actionPerformed
});
(很抱歉我的英语不好,我是一名法国学生……:/)我建议您使用
计时器
并在选中复选框时重复您想要的代码
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
//do your stuff here
}
});
timer.start();
无论如何,您不应该在EDT上做那么多与gui无关的工作
创建一个新的java.util.Timer
并在actionPerformed
方法中调用Timer\scheduleAtFixedRate
不要使用javax.swing.Timer
,因为它在EDT上执行,而且在actionPerformed
方法中似乎要处理很多与gui无关的事情。相反,使用EventQueue.invokeLater
发布与EDT相关的gui内容
您需要传递scheduleAtFixedRate
方法aTimerTask
(其中包含要重复执行的代码)、延迟量(启动任务前的等待时间)和周期量(每次执行之间的延迟时间):
“连续事件”你想要什么?事件中的循环或事件链?选中复选框时,我希望事件中的操作“重复”您的意思是,是否希望事件处理程序中的操作在整个持续时间内重复选中复选框?是的,这是我想做的谢谢你,但我不明白我必须在复选框中包含操作的位置…:(@GaelDoManh我不知道你的意思。你知道如何将侦听器添加到复选框中吗?你在向我们展示的代码中这样做
java.util.Timer timer = new java.util.Timer();
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
//code to execute repeatedly
}
}, 0, 0);
};