2016-11-03 7 views
0

나는이 분포 BorderLayout를있다. 또한 실제 이미지의 다른 비율 (20 %, 50 %, 100 % ...)로 이미지를 표시 할 수있는 옵션이 있습니다.레이아웃에서 공간을 어떻게 사용할 수 있습니까? <a href="https://i.stack.imgur.com/bVQzq.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/bVQzq.jpg" alt="enter image description here"></a></p> <p>나는 그것이 모든 공간을 사용할 채우도록 이미지 크기를 조절 넣을 빨간색 위치에서 :

//GET VALUES 
    int imageWidth = image1.getWidth(); 
    int imageHeight = image1.getHeight(); 
    System.out.println("Image: "+imageWidth + " "+ imageHeight); 
    int targetWidth = this.getBounds().width; 
    int targetHeight = this.getBounds().height; 
    System.out.println("Target: " + targetWidth + " "+ targetHeight); 

    //GET SCALE 
    float scaleWidth=1; 
    float scaleHeight=1; 
    if (imageWidth > targetWidth) { 
     scaleWidth = (float) targetWidth/(float) imageWidth; 
    } 
    if (imageHeight > targetHeight) { 
     scaleHeight = (float) targetHeight/(float) imageHeight; 
    } 

    return min(scaleWidth, scaleHeight); 

문제는 내가 (BorderLayout.CENTER의 경우) 사용 가능한 공간의 크기를 찾을 수 있다는 것입니다 :

나는 이미지가 완벽하게 밀착되는 스케일 인자를 찾기 위해 노력하고있어. 나는 코드 창 크기에 쓴하지만 그건 잘못된, 나 또한으로 시도된다

this.getLayout().preferredLayoutSize(this).width; 

뿐만 아니라 잘못된 값을 제공하거나 적어도 내가 찾을려고하지 무슨. 그리고 크기와 관련된 다른 방법을 찾을 수 없습니다. 그리고 거기에있을 패널에서 가치를 얻으려고하는 것은 가치를 창출하기 전에 필요하기 때문에 실현 가능하지 않습니다.

누구든지이 값을 어떻게 찾을 수 있습니까? 감사합니다.

+0

사용중인 프레임 워크를 지정하는 것을 잊었습니다. AWT/스윙을 사용하고있는 것처럼 보입니까? – SOFe

+0

@PEMapModder 예, 죄송합니다. 방금 추가했습니다. – nck

답변

1

크기를 가져 오려고하지 말아야합니다.

이 값을 실제로 알고 싶다면 사용자 정의 페인팅을 수행하고 동적으로 이미지의 크기를 조정하고 paintComponent() 방법으로 이미지를 페인트해야합니다. 동적 스케일링을하지 않으려면

public class ImagePanel extend JPanel 
{ 
    public ImagePane(...) 
    { 
    } 

    @Override 
    protected void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 

     int width = getWidth(); 
     int height = getHeight(); 

     // do your scaling 

     g.drawImage(...); 
    } 
} 

또는 당신이 당신의 패널에 ComponentListener을 추가하고 componentResized 이벤트를 처리 할 수 ​​

그래서 기본 코드는 뭔가 같은 것입니다. 그런 다음 패널의 실제 크기를 가져 와서 크기 조정 계산을 수행 할 수 있습니다. 자세한 내용과 예제는 Swing 튜토리얼 How to Write a Component Listener의 섹션을 읽어보십시오.

마지막으로 Darryl의 Stretch Icon을 사용하면 사용할 수있는 공간에 따라 아이콘의 크기가 자동으로 조정됩니다. StretchIcon을 사용하여 JLabel을 만들고 GUI에 추가하기 만하면됩니다.