[英]How to dynamically scale an image when changing the size of the JLabel
我已將圖像讀取到JLabel中,並將圖像縮放到JLabel的大小,如下所示:
File file = new File ("C:/Users/Me/Desktop/TestImages/test.jpg");
BufferedImage image = ImageIO.read(file);
Image scaledImage = image.getScaledInstance(label.getWidth(), label.getHeight(), Image.SCALE_SMOOTH);
label.setIcon(new ImageIcon(scaledImage));
我正在使用提供的GroupLayout並將水平軸和垂直軸設置為“自動調整大小”(通過“設計”視圖),以便每當我更改窗口大小時,JLabel的大小都會自動調整為JFrame的大小。
現在,我想調整圖像的大小以及JLabel的大小,然后開始麻煩了。 我添加了一個事件處理程序,它響應於調整JFrame的大小,如下所示:
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
addScaledImage(); // executes the lines above
}
});
從理論上講這是可行的,但是非常慢。 因此,我嘗試將事件處理程序添加到JLabel而不是JFrame中,但這導致了另一個問題:圖像在不執行任何操作的情況下一直在擴展。 然后,我用JScrollPane包圍了JLabel,並將事件處理程序添加到JScrollPane中。 只要我擴展JFrame的大小,此方法就起作用。 但是,當我減小窗口大小時,圖像不會減小,而是保持不變。
有沒有一種更優雅的方式來集成事件處理程序(也許不需要JScrollPane的幫助)?
如何使我的圖像/ JLabel與任何調整大小事件一起自動調整大小(增加和減小JFrame的大小)? 是否有其他方法(例如,另一個LayoutManager)更適合於此?
另外,如果我想保持圖像的高寬比,是否有指定縮放方法?
我想調整圖像的大小以及JLabel的大小
您可以使用“ 拉伸圖標” 。 更改標簽尺寸時,它將自動縮放。 適用於任何可以顯示圖標的組件。
然后我用JScrollPane包圍了JLabel
但是,當我減小窗口尺寸時,圖像不會減小,而是保持不變
您不應該使用JScrollPane。 滾動窗格縮小時,添加到滾動窗格的組件的大小不會更改。 而是顯示滾動條。
我正在使用提供的GroupLayout並將水平和垂直軸設置為“自動調整大小”
我不會使用IDE來生成布局代碼,也不會使用GroupLayout,因為它對於這種簡單的事情來說過於復雜。
只需將標簽(使用StretchIcon)添加到框架即可。 默認情況下,框架使用BorderLayout,它將自動調整添加到BorderLayout的CENTER的任何組件的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.