我有一个关于制作JButton闪光颜色的问题,就像你在百万富翁电视节目中给出答案时所看到的那样。我在那里得到了关于如何正确地做到这一点的答案,但我也设法以这种方式“做到”,这提出了一些我无法完全回答的问题。
正如你在下面的代码中看到的那样,我正在呼唤一个
JOptionPane.showMessageDialog()
之后的JButton.setBackground
以及我使用
do {
}while(time+i*100>System.currentTimeMillis());
robot.keypress
暂时忽略JOptionPane.ShowMessageDialog()
。让我们谈谈这一点。如果我在代码停止之前没有使用JOptionPane,那么ui似乎会被冻结并且按钮不会重新绘制。但是调用robot.keypress
会给按钮提供“时间”来重新绘制。然后代码正常停止,我实现顺序颜色重绘。我使用 public static void paintbutton(int bnr,boolean corr) {
long time;
try {
Robot robot = new Robot();
for (int i=5;i>1;i--){
b[bnr-1].setBackground(null);
// Simulate a key press
robot.keyPress(KeyEvent.VK_SPACE);
robot.keyRelease(KeyEvent.VK_SPACE);
JOptionPane.showMessageDialog(null,"hi");
time = System.currentTimeMillis();
do {
}while(time+i*100>System.currentTimeMillis());
b[bnr-1].setBackground(i==1?(corr?Color.green:Color.red):Color.yellow);
// Simulate a key press
robot.keyPress(KeyEvent.VK_SPACE);
robot.keyRelease(KeyEvent.VK_SPACE);
JOptionPane.showMessageDialog(null,"hi");
time = System.currentTimeMillis();
do {
}while(time+i*100>System.currentTimeMillis());
}
} catch (AWTException e) {
System.err.println("error");
}
}
来关闭窗格并达到所需的效果。
我的问题:首先,当创建允许按钮重绘的JOptionPane时会发生什么?其次,为什么机器人只能在调用JOptionPane之前工作?在Pane被调用之后,我试着打电话,就像人们会认为它会发生一样,但在那种情况下它不起作用。
额外:这在mac中无效,似乎只适用于Windows。不太确定。
public static void paintbutton(int bnr,boolean corr) {
long time;
for (int i=5;i>1;i--){
b[bnr-1].setBackground(null);
time = System.currentTimeMillis();
do {
}while(time+i*100>System.currentTimeMillis());
b[bnr-1].setBackground(i==1?(corr?Color.green:Color.red):Color.yellow);
time = System.currentTimeMillis();
do {
}while(time+i*100>System.currentTimeMillis());
}
}
避免混淆这个问题的性质! 下面的状态中的代码不起作用,我知道它不应该。我很好奇如何添加JOptionPane来解决这个问题。
var tunnel = require('tunnel-ssh');
var config = {
username:'root',
password:'secret',
host:'remote.mysql.server.com',
port:3306
}
tunnel(config, function(e, sshTunnel){
//Now, you should be able to connect to the tunnel via localhost:3336.
});