2012-09-05 2 views
15

Java를 사용하여 시스템 트레이에 아이콘을 추가하고 표시하려고합니다. 그러나 아이콘은 항상 너무 작거나 영역에서 잘립니다. 당신이 말할 수 없었던 경우에 대비하여 왼쪽에서 두 번째입니다.시스템 트레이 아이콘이 왜곡되어 보입니다.

내가 뭘 잘못하고 있니? 이 아이콘을 완전히 표시되게하려면 어떻게해야합니까? 시스템 트레이에 사용할 표준 아이콘 크기는 무엇입니까?

편집 : 최적의 크기로 아이콘을 표시하려면 AWT를 SystemTray 및 TrayIcon에

답변

25

당신이 디스크에서 실제 이미지 리소스를 검색 한 후, 당신이 "가짜"한 온 - 더 - 플라이를 생성하고 그 폭을 고려하여 필요한 크기로 크기를 조정할 수 있습니다.

이 방법은 이미지를 부드럽게 확대/축소하지 않으므로 setImageAutoSize(true) 메서드를 사용하는 것보다 낫다는 것을 알게되었습니다.

BufferedImage trayIconImage = ImageIO.read(getClass().getResource("/path/to/icon.png")); 
int trayIconWidth = new TrayIcon(trayIconImage).getSize().width; 
TrayIcon trayIcon = new TrayIcon(trayIconImage.getScaledInstance(trayIconWidth, -1, Image.SCALE_SMOOTH)); 
+1

+1 좋은 매뉴얼을 참조하기 위해, 나는 OP가 그것의 첫 번째 정류장을 만들 필요가 있다고 생각합니다. –

+0

아주 좋은 해결 방법. –

+0

죄송합니다. 투명 배경 이미지를 리눅스에 추가하지 않으려 고합니다. – Gopal00005

8

를 사용하고, 수동으로 올바른 크기로 크기를 조정해야합니다. 이 정확한 크기는 운영 체제와 환경 설정에 따라 다를 수 있으므로 Java는 예제 이미지의 경우 16x16 크기의 작업 표시 줄 아이콘 크기를 가져 오는 방법을 제공합니다.

if (SystemTray.isSupported()) { 
    SystemTray tray = SystemTray.getSystemTray(); 
    Dimension trayIconSize = tray.getTrayIconSize(); 
    // resize icon image to trayIconSize 
    // create your tray icon off of the resized image 
} 
+0

어떻게 크기를 조정합니까? –

+0

이미지 크기를 조절하는 작업은 매우 간단합니다. [여기에 좋은 튜토리얼] (http://www.mkyong.com/java/how-to-resize-an-image-in-java/)이 있습니다. – Vulcan

+0

16x16이 내 작업 표시 줄에서 너무 작게 보입니다 –

6

TrayIcon.setImageAutoSize(boolean)에 따르면.

자동 크기 속성을 설정합니다. 자동 크기는 용지함 이미지가에 할당 된 공간에 맞게 자동으로 크기인지 여부를 결정합니다. 기본적으로 auto-size 속성은 false로 설정됩니다.

자동 크기가 거짓이고 이미지 크기가 용지함 아이콘 공간과 일치하지 않으면 해당 공간 안에 이미지가 그대로 그려집니다. 할당 된 공간보다 큰 경우 이 잘립니다.

+5

+1 ... * 가장 쉬운 해결책은 트레이 아이콘을 자동으로 크기 조정하도록 설정하는 것이지만 내부적으로는 대부분의 사람들이 프로덕션 용도로 사용하기에는 적합하지 않은 평탄하지 않은 알고리즘을 사용하고있는 것처럼 보입니다. 자동 크기 조정 된 이미지가 매끄럽지 않고 가장자리가 고르지 않습니다. 나는 이것이 성능상의 이유로 이루어 졌다고 생각한다. 일반적으로 수동으로 크기를 조정합니다. http://stackoverflow.com/a/12287388/216104 – Redandwhite

1

내가 사용하고있는 코드를 만들기 위해 이러한 대답 중 일부가 결합되었습니다.

이것은 100x100에서 시작하는 png에서 내 시스템 트레이에 멋진 아이콘을 생성합니다.

망막 맥북에서 아이콘이 더 크게 축소 된 것처럼 보일만한 가치가 있습니다. 그래서 난 다른 곳에서 Mac에서 실행 중인지 확인하고 이것을 적용하지 않으면 확인 않습니다.

public Image imageForTray(SystemTray theTray){ 

    Image trayImage = Toolkit.getDefaultToolkit().getImage("my100x100icon.png"); 
    Dimension trayIconSize = theTray.getTrayIconSize(); 
    trayImage = trayImage.getScaledInstance(trayIconSize.width, trayIconSize.height, Image.SCALE_SMOOTH); 

    return trayImage; 
} 
관련 문제