【问题标题】:How can I add content to a JPanel only AFTER it has been layout如何在 JPanel 布局后才向 JPanel 添加内容
【发布时间】:2012-08-11 15:54:13
【问题描述】:

我需要在 JPanel 中显示一个图像(它本身被放置在几层 JPanel 中)并且我想调整图像的大小以适应 JPanel 的宽度。现在,当我将图像添加到 JPanel 时,JPanel 的 getWidth() 等于屏幕宽度,因此图像被调整为屏幕宽度。但是在将 Jpanel 添加到其父 JPanel 之后,宽度发生了变化,因此图像对于 JPanel 的宽度来说太大了。

我想在 JPanel 布局后才调整大小并添加图像,所以我得到了适当的面板宽度并可以相应地调整图像大小。

我怎样才能做到这一点?有没有类似afterLayout()的事件?

【问题讨论】:

  • “添加图片”是什么意思?核心 JPanel 没有 api 来做这样的事情......在 SwingX 的 JXPanel 中,您将设置一个 ImagePainter(作为面板的 backgroundPainter),其拉伸属性设置为 true:它会自动缩放自身以始终适合面板大小
  • 我倾向于计算paintComponent(Graphics)上的尺寸。

标签: java swing layout jpanel


【解决方案1】:

是的,您可以使用ComponentListener 来执行此操作。 LayoutManager 应该在布局组件时调用 setSize 方法,因此您应该能够收到此类修改的通知。

你要找的方法是:

void componentResized(ComponentEvent e){}

所以实现ComponentListener接口,通过addComponentListener()方法将其添加到想要的Component中:

JPanel panel;
...
panel.addComponentListener(new YourClassImplementingComponentListener());

【讨论】:

    【解决方案2】:

    使用ComponentListener 并听ComponentResized 方法。在那写下你的逻辑来根据面板的大小调整图像的大小。当面板调整大小时,图像也会相应地调整大小。

    【讨论】:

    • hmm ...这与@Heisenbug 的答案不同并扩展了...?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2019-08-24
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多