复选框上的事件
Event on chekbox
我正在 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
});
(抱歉我的英语不好,我是法国学生.... :/ )
我建议你使用 timers
并在检查 checkbox
时重复你想要的代码
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
//do your stuff here
}
});
timer.start();
无论如何,您不应该在 EDT 上做那么多与图形用户界面无关的工作。
创建一个新的java.util.Timer
并在actionPerformed
方法中调用Timer#scheduleAtFixedRate
。 不要使用 javax.swing.Timer
,因为它在 EDT 上执行,而且您似乎在 actionPerformed
方法中处理了很多与图形用户界面无关的事情。相反,使用 EventQueue.invokeLater
到 post 与 EDT
相关的 gui 事物
你需要给scheduleAtFixedRate
方法传一个TimerTask
(里面有你要重复执行的代码),延迟量(任务启动前的等待时间)和周期量(每次执行之间的延迟时间):
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);
};
我正在 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
});
(抱歉我的英语不好,我是法国学生.... :/ )
我建议你使用 timers
并在检查 checkbox
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
//do your stuff here
}
});
timer.start();
无论如何,您不应该在 EDT 上做那么多与图形用户界面无关的工作。
创建一个新的java.util.Timer
并在actionPerformed
方法中调用Timer#scheduleAtFixedRate
。 不要使用 javax.swing.Timer
,因为它在 EDT 上执行,而且您似乎在 actionPerformed
方法中处理了很多与图形用户界面无关的事情。相反,使用 EventQueue.invokeLater
到 post 与 EDT
你需要给scheduleAtFixedRate
方法传一个TimerTask
(里面有你要重复执行的代码),延迟量(任务启动前的等待时间)和周期量(每次执行之间的延迟时间):
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);
};