Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不执行操作的情况下更改jframe属性?_Java_Swing - Fatal编程技术网

Java 在不执行操作的情况下更改jframe属性?

Java 在不执行操作的情况下更改jframe属性?,java,swing,Java,Swing,我试图使用jnativehook制作一个热键程序,但是当我按下一个键(外焦距)时,我无法改变按钮的颜色。按键和一切工作正常,但我猜它需要执行某种操作来“刷新”gui 目前,我只有一个简单的监听器,只要按下f12,它就会转到setstartbtn函数: boolean s = false; public void nativeKeyPressed(NativeKeyEvent nke) { if (nke.getKeyCode() == NativeKeyEvent.VC

我试图使用jnativehook制作一个热键程序,但是当我按下一个键(外焦距)时,我无法改变按钮的颜色。按键和一切工作正常,但我猜它需要执行某种操作来“刷新”gui

目前,我只有一个简单的监听器,只要按下f12,它就会转到setstartbtn函数:

 boolean s = false;
 public void nativeKeyPressed(NativeKeyEvent nke) {       
    if (nke.getKeyCode() == NativeKeyEvent.VC_F12){
       setstartbtn();

    }
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}


  public void setstartbtn(){

             jButton1.setBackground(Color.red);
             jstartlabel.setForeground(Color.red);
             mainrot = false;

}
如果我将第二个功能分配给按钮本身,那么它工作正常

这是同一个问题,例如,如果我有一个倒计时计时器,当计时器从10达到0时,按钮应该变成绿色,但它没有,所以我猜它需要执行操作

任何帮助都将不胜感激

编辑:以下是完整的项目:


如果重新验证不起作用,请尝试重新绘制()。

为了更快地获得更好的帮助,请发布or。我将从一些调试语句开始,并确保您的方法实际上以您期望的方式被调用。是的,它被调用很好,甚至进入了挫折阶段,但不会更新gui。重新验证或重新绘制似乎也没有任何作用(单独在中尝试,并在按钮本身上尝试)。
setBackground
是绑定属性,意味着它应该设置自己的
repaint
revalidate
与更新布局的关系比其他任何事情都要大。我建议从
System.out.println
开始,以确保调用了该方法,并在攻击
repaint
revalidate
之前验证对象的实例是否与屏幕上的实例相同-IMHOIt将很好地使用该方法,甚至调试并调用所有内容。我在主主题中添加了完整的项目。我下载了您的项目,似乎您需要jButton1.setOpaque(true);使红色背景可见。(注I仅使用回转组件进行测试)
 public void setstartbtn(){

         jButton1.setBackground(Color.red);
         jstartlabel.setForeground(Color.red);
         mainrot = false;
         revalidate();
         repaint();
}