1

这是我的工作和问题:

我正在尝试使用 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);

} 
4

2 回答 2

1

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

另外,请注意以下几点:

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

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

于 2013-11-13T11:29:38.867 回答
0

哦,朋友,我找到了答案!很简单。我正在添加单个 jDesktopPane!当 jlable 和 jpanel 在 jDesktopPane 上时,它起作用了!(在 jframe 和 jPanel 上无法刷新这个 jLable 和 jPanel)

谢谢大家!:)

于 2013-11-13T11:39:23.393 回答