繁体   English   中英

java swing更新问题

[英]java swing update problem

我有一个Frame类(扩展JInternalFrame)。 在类中我实例化JPanel并初始化setVisisble(false) 在用户单击框架中的buttom并进行一些处理之后,我调用JPanel内部的方法来更新其中一个标签。 然后我在JPanel上执行setVisible(true)

但是,在我的一个标签上调用setText()后,JPanel没有正确“刷新”。 在处理并将JPanel设置为可见(并且我确认正确的数据存在等)之后,JPanel仍然处于其初始化形式。

换句话说,我需要做什么才能在框架内的JPanel上调用setText()实际刷新Panel?

基本上我想知道:如果更新嵌套在JFrame内的swing组件内的标签文本,更新是否可见? 如果不是,需要做些什么才能刷新?

试试这个:

myPanel.invalidate()

如果这不起作用,那么可能尝试发布一些代码。

为什么你提前创建JPanel? 为什么不用正确的文字重新创建它,第一次?

每次更改标签时,您可能需要重新验证面板; 即:

myPanel.validate()

这个额外的面板需要完成什么? 也许你应该使用一个对话框; 或者只是将JPanel添加到现有框架中。

谢谢你的所有答案。 事实上,我没有发布任何代码,这使得无法找出问题(我现在意识到)。 这个课程相当大,因为我不知道问题在哪里撒谎,我只是概述了我认为相关的内容。

在任何情况下,经过多次挖掘后,如果有人碰到类似的东西,会出现什么问题:

我在JPanel中创建的JLabels使用setBounds()方法调整大小,我提供xyheightwidth 这些对setBounds()调用最初是在初始化JPanel时完成的。 此外, height, width参数是从标签动态拉出的(使用getMinimumHeight()等,因此标签的大小根据其中的文本大小而定)。 问题是一些标签正在被初始化而没有文本导致宽度为0.所以后来当我调用setText() ,它正常工作,除了宽度为0的事实(文本在那里,我只是看不到它!)。

无论如何......解决方案只是在每次使用setText()时在标签上调用setBounds() (不仅仅是最初)。

你没有给我们太多的帮助。 这里有一些常见的事情需要检查。

你是否覆盖了JInternalFrame的任何绘制方法? 如果是这样,请确保在绘画完成后调用基类版本。 基类版本处理诸如面板边框和其他GUI对象剪切之类的东西。

您确定接收setText()调用的标签变量与您添加到JPanel的标签变量相同吗?

为了完全可靠地在GUI中应用内存中对象的更改,您需要调用相应对象的validate()和repaint()方法。 validate()对最新的更改进行“提交”操作。 因此,如果更改标签的文本,即使调用repaint(),也可能无法看到更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM