【问题标题】:How to force a Jcomponent to appear in Java?如何强制 Jcomponent 出现在 Java 中?
【发布时间】:2016-09-23 22:56:39
【问题描述】:

如果我有一个动态添加 JLabel 的监听器,有没有办法强制组件立即出现?

我正在做一个项目,我有一个 ArrayList 存储每个动态添加的标签。我有另一种方法,涉及在面板上画一条线。这取决于新的 JLabel 位置(x 和 y)。这是我的监听器中的代码:

panel.add(labelArrayList.get(index));
panel.repaint();
panel.revalidate();

drawLine();

其中 drawLine() 是一种简单地在面板上绘制单线的方法。

private void drawLine(){
    /*Draw from (x1,y1) to (x2,y2), where (x1,y1) is fixed at original and (x2,y2) is the location of the newly added JLabel*/
    graphics2d.drawLine(x1, y1, x2, y2);
}

当我处于调试模式时,我看到在 repaint() 和 revalidate() 调用后没有添加项目。因此,我无法获取新添加的标签的位置。新的 JLabel 在调用 drawLines() 方法后出现。

我希望在调用 drawLine() 之前添加新标签。有什么办法让它工作吗?

【问题讨论】:

  • 这段代码在监听器中?老实说,直接在监听器中画一条线是很奇怪的,这样的事情通常发生在 paintComponent() 方法中。您的主要问题可能与不以 Swing 方式做事有关。

标签: java paint repaint


【解决方案1】:

调用doLayout()(而不是repaint()revalidate())就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多