我有一个正在添加JLabel的JPanel。然后我想删除所有的JLabel并添加一些新的。
所以我做了以下几点:
panel.removeAll();panel.repaint();
panel.add(new JLabel("Add something new");
panel.revalidate();
这很好。当我在这之后开始一个新线程时,我的问题就出现了,比如:
panel.removeAll();panel.repaint();
(1)panel.add(new JLabel("Add something new");
panel.revalidate();
//new thread to start - this thread creates new JLabels that should appear under (1)
firstProducer.start();
try {
firstProducer.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后原始JLabels的输出仍然可见。我读到重新验证过程是一个长时间运行的任务,因此firstProducer线程正在启动,而重新验证正在进行并产生冲突。处理这个问题的最佳方法是什么?
问题是第一生产者。加入。如javadoc中所述
等待此线程死亡。
因此,您正在阻止事件调度线程,直到您的另一个线程完成,因此无法重新绘制或重新验证面板,并且您将无法在UI中看到您的更改。
有关更多信息,请参阅Swing并发教程
编辑:当我拖动边框时,某种刷新被发送,我需要弄清楚并手动发送相同的刷新。 请注意,我已经尝试使用revalidate()和repaint()。 当使用JFrame和JPanel来显示一个框架时,我试图使框架的大小易于改变。 null 此外,一个重要的注意事项是,当您拖动边框时,白条会消失,并正确地重新加载/刷新内容(即使您只是少量拖动)
问题内容: 我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。 似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。 调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。 作为测试,我添加了一个
我想重新绘制我的屏幕。到目前为止,它所做的只是在第一个屏幕上的头部应该在的地方显示一个点。这很好,但是我在代码中写了我想每秒将头部向下移动10个像素。我正在打印头部应该在的位置,在命令提示符中它显示y值确实在增加。但是在我的屏幕上,头部没有移动。 我尝试过使用revalidate方法,尝试扩展canvas类而不是jframe,我尝试过只为paint方法使用不同的类,我尝试过用paintCompon
我有一个名为BigPanel的JPanel子类作为JFrame的内容窗格,在BigPanel对象中有一个嵌套的JPanel子类。单击按钮,嵌套面板应该从一个JPanel子类更改为另一个。嵌套面板没有重置,正确的子类将打印到控制台,但实际面板不会更新包com.grantbroadwater;
我已经被这件事困扰了几天,希望你能帮助我解决这个问题。我创建了一个类似流程图的应用程序来绘制不同类型的铅锤项目,并将不同的endpoint连接到这些项目上。将其创建为元素后,将根据铅锤项目的类型动态添加endpoint。是这样的吗。 这就是我创建铅锤项目的方式。 然后根据endpoint的类型添加endpoint。 这就是它看起来的样子 屏幕一 我设法从方法“GetConnections”中获取数
有没有什么方法可以等待场景重新绘制? 我的问题是,我想用getChildren()向窗格添加一个注释。add()然后使用Node在此节点上触发事件。fireEvent(事件)。 但这项活动没有进行。我认为问题在于,在fireevent发生时,场景没有被重新绘制,因此此时节点不是新场景的一部分。 所以最好的办法是等待现场重新粉刷,然后启动活动。