我正在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
});
(抱歉我的英语不好,我是法国学生......:/)
答案 0 :(得分:0)
我建议您使用timers
并重复检查checkbox
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
//do your stuff here
}
});
timer.start();
答案 1 :(得分:0)
你不应该在EDT上做那么多非gui相关的工作。
创建新的java.util.Timer
并在Timer#scheduleAtFixedRate
方法中调用actionPerformed
。 不要使用javax.swing.Timer
,因为它在EDT上执行,而您似乎正在处理actionPerformed
方法中的许多与非gui相关的事情。相反,使用EventQueue.invokeLater
发布与EDT相关的东西
您需要传递scheduleAtFixedRate
方法TimerTask
(包含您想要重复执行的代码),延迟金额(等待时间befire启动任务)和期间金额(延迟时间)每次执行之间):
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);
};