2016-11-03 8 views
0

私はこの分布にBorderLayout持っている:私はそれがすべてのスペースが利用可能に満たすようにスケーリングされた画像を入れたい赤い位置で enter image description hereレイアウトでスペースを使用するにはどうすればよいですか?

を。また、実際の画像のさまざまなスケール(20%、50%、100%...)で画像を表示するオプションもあります。

//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/swingを使用しているようですか? – 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イベントを処理することができ、動的スケーリングを行うにはしたくない場合。次に、パネルの実際のサイズを取得し、スケーリング計算を行います。詳細と例については、How to Write a Component ListenerのSwingチュートリアルのセクションを読んでください。

最後に、DarrylのStretch Iconを使用して、使用可能なスペースに基づいてアイコンの縮尺を自動的に調整することもできます。あなたがする必要があるのは、StretchIconを使用してJLabelを作成し、GUIに追加するだけです。

関連する問題