Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 为什么赢了';t JButton.setBounds是否在for循环中工作?_Java_Swing_Animation_Jbutton_Mouselistener - Fatal编程技术网

Java 为什么赢了';t JButton.setBounds是否在for循环中工作?

Java 为什么赢了';t JButton.setBounds是否在for循环中工作?,java,swing,animation,jbutton,mouselistener,Java,Swing,Animation,Jbutton,Mouselistener,如果不是在for循环中,那么setBounds方法可以很好地工作,但是当我把它放在for-lopp中时,它就开始工作了为什么 btnResize.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { //This re sizes the JButton. btnResize.setBo

如果不是在for循环中,那么setBounds方法可以很好地工作,但是当我把它放在for-lopp中时,它就开始工作了为什么

btnResize.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {

            //This re sizes the JButton.
            btnResize.setBounds(10, 11 ,100, 100);

            //This does nothing
            for(int i = 0; i < 500; i ++) {
                btnResize.setBounds(i, i , i, i);
            }

        }
    });
btnResize.addMouseListener(新的MouseAdapter(){
@凌驾
公共无效鼠标单击(鼠标事件arg0){
//这将重新调整JButton的大小。
b重新调整挫折(10,11,100,100);
//这没用
对于(int i=0;i<500;i++){
b调整挫折(i,i,i,i);
}
}
});

您在UI线程中执行此操作,这意味着在循环完成之前,UI中没有任何内容有机会对其作出反应。。。只有最后的
setBounds
调用才会真正产生任何可见的效果

如果您试图执行动画,则需要使用某种描述的计时器,以便可以重复进行小更改、等待(不阻塞UI线程),然后再进行另一次更改等(无论如何,您可能不想使用
setBounds
,但这是一个稍微不同的问题) 请注意,您仍然需要在UI线程上进行更改,因为它们是UI更改-您只需要让UI对更改做出反应,然后再进行下一次更改


有关更多信息和示例,请参阅。

您在UI线程中执行此操作,这意味着在循环完成之前,UI中没有任何内容可以对其作出反应。。。只有最后的
setBounds
调用才会真正产生任何可见的效果

如果您试图执行动画,则需要使用某种描述的计时器,以便可以重复进行小更改、等待(不阻塞UI线程),然后再进行另一次更改等(无论如何,您可能不想使用
setBounds
,但这是一个稍微不同的问题) 请注意,您仍然需要在UI线程上进行更改,因为它们是UI更改-您只需要让UI对更改做出反应,然后再进行下一次更改


有关更多信息和示例,请参阅。

您在UI线程中执行此操作,这意味着在循环完成之前,UI中没有任何内容可以对其作出反应。。。只有最后的
setBounds
调用才会真正产生任何可见的效果

如果您试图执行动画,则需要使用某种描述的计时器,以便可以重复进行小更改、等待(不阻塞UI线程),然后再进行另一次更改等(无论如何,您可能不想使用
setBounds
,但这是一个稍微不同的问题) 请注意,您仍然需要在UI线程上进行更改,因为它们是UI更改-您只需要让UI对更改做出反应,然后再进行下一次更改


有关更多信息和示例,请参阅。

您在UI线程中执行此操作,这意味着在循环完成之前,UI中没有任何内容可以对其作出反应。。。只有最后的
setBounds
调用才会真正产生任何可见的效果

如果您试图执行动画,则需要使用某种描述的计时器,以便可以重复进行小更改、等待(不阻塞UI线程),然后再进行另一次更改等(无论如何,您可能不想使用
setBounds
,但这是一个稍微不同的问题) 请注意,您仍然需要在UI线程上进行更改,因为它们是UI更改-您只需要让UI对更改做出反应,然后再进行下一次更改



有关更多信息和示例,请参阅。

1:这种情况发生得非常快。2:窗口/框架没有立即以图形方式更新。为什么还要这样做?如果您使用的是布局管理器:您根本不应该使用
setBounds
。如果你说你有兴趣制作一个移动的动画,那么用这种方式是不合适的。1:它发生得非常快。2:窗口/框架没有立即以图形方式更新。为什么还要这样做?如果您使用的是布局管理器:您根本不应该使用
setBounds
。如果你说你有兴趣制作一个移动的动画,那么用这种方式是不合适的。1:它发生得非常快。2:窗口/框架没有立即以图形方式更新。为什么还要这样做?如果您使用的是布局管理器:您根本不应该使用
setBounds
。如果你说你有兴趣制作一个移动的动画,那么用这种方式是不合适的。1:它发生得非常快。2:窗口/框架没有立即以图形方式更新。为什么还要这样做?如果您使用的是布局管理器:您根本不应该使用
setBounds
。如果你说你有兴趣制作一个移动的动画,那么这样做是不合适的either@mKorbel:已编辑-查看您是否认为这样更好。答案接近于设置组件的位置和大小的适当值。然而,在进行GUI渲染时,真正的原因是,即使我们对Swing GUI绘制进行了几次更改,Swing也足够聪明,可以将所有这些更改封装到一个单独的绘制请求中,并计算每个像素,这些像素需要在EDT内通过调用组件进行更新,以进行最终的GUI渲染。而且,事实上,在为组件移动设置动画时,最好使用缓冲区策略:使用包含目标组件绘画的图像并移动图像。@Sage:不管一次性包装所有更改,如果UI线程正在进行进一步更改,它仍然无法响应,是吗?这个答案的核心——一次完成多个更改并不能达到预期效果——对于这两种更改都是正确的,不是吗?@JonSkeet,是的,这就是为什么答案必然接近正确的原因。但并不完全正确;)事实上,EDT可以忙于执行其他任务,但