2012-09-17 48 views
0

我的揮杆,應用程序通過GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds()設置JFrame的大小,所有的元素都是相對於這個值,所以基本上應用適應屏幕分辨率。自定義按鈕

現在我有一個問題,我的自定義按鈕。現在,我創建三個不同的ImageIcons(正常,側翻並壓),並將它們添加到該按鈕。但是,當然,如果我跑比1920x1080的分辨率不同(這是我的默認)的應用,按鈕過大。

我發現這個問題(http://stackoverflow.com/questions/8234726/auto-resizing-jbutton-icon)並嘗試通過創建一個圖標的解決方案,把它放在Jlabel上,並將標籤添加到按鈕,但沒有任何東西被替代。另外,我不需要調整窗口大小。

,這是什麼話題最快的解決方案?一個選項是爲每個分辨率單獨創建所有自定義圖像,在圖像名稱末尾添加分辨率的x值,並讓我們說一個開關盒來檢查應該加載哪個圖像,但我認爲這是一個非常昂貴和耗時的解決方案。是否有一種有效的方法可以將加載的圖像自動調整爲相對於屏幕分辨率的特定尺寸?

回答

2

如果你有一個Image,你可以調用getScaledInstance檢索調整後的圖像。

如果您有​​,您可以調用getImage(),檢索Image,然後使用上面提出的解決方案。

getScaledInstance返回Image,你可以回捲到ImageIcon並在JButtonJLabel設置。

所以,我會用最高分辨率創建我的圖像,然後將它們縮小到合適的分辨率。

這裏是一個小片段(從@mKorbel解決方案的啓發,你從開始):

import java.awt.BorderLayout; 
import java.awt.Image; 
import java.net.MalformedURLException; 
import java.net.URL; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class ResizeIconInButton extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg"; 
    private JButton myButton = new JButton(); 

    public ResizeIconInButton() throws MalformedURLException { 
     myButton.setIcon(new ImageIcon(new ImageIcon(new URL(IMAGE_PATH)).getImage().getScaledInstance(600, 400, Image.SCALE_SMOOTH))); 
     add(myButton, BorderLayout.CENTER); 
     setTitle("Resize Icon In Button"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        ResizeIconInButton main = new ResizeIconInButton(); 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 

小記:這是不建議延長JFrame的,但我試圖保持儘可能接近的原代碼。

+0

完美的作品,非常感謝這個解決方案! –