Java实时JPanel,JLabel +图像大小调整

时间:2013-11-13 11:16:51

标签: java swing bufferedimage

这是我的工作和问题:

我正在尝试使用jSlider的值重新调整jPanel和jLable的大小。 (jLable在jPanel中),jLable有图像。

虽然我正在使用jSlider重新调整jlable的大小,但我想缩放以使该图像适合jLable。

我使用了imgscaler-4.2.jar库来调整我的图像适合jLable。 (http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/

问题是当我重新调整jLable和jPanel的大小时,它的重新调整大小并且图像适合不起作用。我想实时重新调整我的jLable和jPanel +比例图像适合jlable。

有时候jPanel和jLable又来了它的实际尺寸。 :(

帮我解决这个问题

提前致谢!

这是我的代码:

    private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {                                      

    jPanel2.setSize(new Dimension(jSlider2.getValue(), jSlider2.getValue()));
    jLabel3.setSize(new Dimension(jSlider2.getValue(), jSlider2.getValue()));
    jPanel2.repaint();
    jLabel2.repaint();
    BufferedImage scaledImg = Scalr.resize(img, jLabel3.getHeight());
    ImageIcon imageIcon = new ImageIcon(scaledImg);
    jLabel3.setIcon(imageIcon);

} 

2 个答案:

答案 0 :(得分:1)

我认为你需要考虑使用ComponentListener。将侦听器添加到相关标签或面板中,并在调用componentResized时将内容缩放到新大小。 (上面的最后三行代码可以构成componentResized实现的主体。)

另外,请注意以下几点:

jPanel2.repaint();
jLabel2.repaint();

repaint方法只是请求Swing在可能的情况下重新绘制组件。它没有做任何“内联”重新绘制。

答案 1 :(得分:0)

哦朋友们,我找到了答案!非常简单。我添加了单个jDesktopPane!当jlable和jpanel在jDesktopPane上时,它是有效的! (在jframe和jPanel上不能刷新这个jLable和jPanel)

全部谢谢! :)