这是我的工作和问题:
我正在尝试使用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);
}
最佳答案
我认为您需要考虑使用ComponentListener
。将侦听器添加到有问题的标签或面板中,并在调用componentResized
时将内容缩放到新的大小。 (上面的最后三行代码可以构成componentResized
实现的主体)。
另外,只需注意以下几点:
jPanel2.repaint();
jLabel2.repaint();
repaint
方法仅是要求Swing尽可能重绘组件的请求。它不执行任何“内联”重绘。关于java - Java实时JPanel,JLabel +图像大小调整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19952304/