![]() |
1
11
在原始代码中没有调用paint component()的原因之一是,该组件的大小为“零”,而repaintmanager足够聪明,不尝试绘制没有大小的内容。 重新排序代码的原因是,当您将组件添加到框架,然后使框架可见时,将调用布局管理器来布局组件。默认情况下,框架使用borderlayout,并且默认情况下,将组件添加到borderlayout的中心,这样会为组件提供所有可用空间,以便对其进行绘制。 但是,如果将内容窗格的布局管理器更改为FlowLayout,仍然会出现问题,因为FlowLayout尊重组件的首选大小,即零。 所以您真正需要做的是为您的组件分配一个首选的大小,这样布局管理器就可以完成他们的工作了。 |
![]() |
2
4
这里的一个主要问题是,您没有在 Event Dispatch Thread (EDT) . 尝试将主方法中的所有代码包装为以下内容:
另外:在设置帧可见之前,将ImageLoadTest添加到帧。这是基于对代码的快速粗略阅读——我将进一步阅读它,看看还能找到什么。 编辑: 按照我上面的原始建议,并将主要方法简化为如下所示,然后将调用paintcomponent():
另外,我还将阅读使用计时器来执行动画,以及一般的Swing事件调度,以及如何/何时覆盖各种绘制方法。 http://java.sun.com/products/jfc/tsc/articles/painting/ http://java.sun.com/docs/books/tutorial/uiswing/misc/timer.html http://java.sun.com/docs/books/tutorial/uiswing/concurrency/dispatch.html |
![]() |
3
4
使 汤姆·霍丁-铲球 快乐。我又重写了一遍
完全重写
原海报代码的改进
所以你的主要问题是,你没有设置组件的首选大小,也没有调用
这应该管用 jpanelpaint/imageloadtest.java
爪哇
|
![]() |
4
3
这些是导致原始代码无法工作的主要问题:
做了以上的工作之后,调用方法paintcomponent或paint真的没关系,只要我记得在开始时调用超级构造函数,这两个方法似乎都可以工作。 这个信息是由@jitter、@tockline和@camicker写的,真是太棒了! P.S.不知道回答你自己的问题是否被认为是不好的形式,但是由于我需要的信息是从几个答案中收集的,所以我认为最好的方法是修改其他答案,然后写一个这样的总结。 |
![]() |
5
2
我建议阅读“肮脏的有钱客户”的前几章。多年来我一直在使用Swing,但在读了这本书之后,我终于完全理解了Java的绘画机制是如何工作的。 |
|
Jonathan Rada · 使用jbutton设置值,然后确认值? 6 年前 |
![]() |
Molay · 不会为每个发布()调用SwingWorker进程() 6 年前 |
![]() |
Lakshya Munjal · Java中的Onclick事件 7 年前 |
![]() |
Denny Williams · 如何获得鼠标移动之间的时间? 7 年前 |
![]() |
alexanoid · 旋转BuffereImage并移除黑色边界 7 年前 |
![]() |
Vincent · 显示内容错误charles(awt?) 7 年前 |