1

これは私の仕事と問題です:

jSlider の値を使用して、jPanel と jLable のサイズを変更しようとしています。(jLable は jPanel の内部にあります) jLable には画像があります。

jSliderを使用してjlableのサイズを変更している間、その画像をjLableに合わせて拡大縮小したいと考えています。

imgscaler-4.2.jar ライブラリを使用して、画像を jLable に合わせてサイズ変更しています。( http://www.thebuzzmedia.com/software/imgscar-java-image-scaling-library/ )

問題は、jLable と jPanel のサイズを変更しているときに、サイズが変更され、イメージ フィットが機能しないことです。jLable と jPanel のサイズをリアルタイムで変更し、イメージを jlable に合わせて拡大縮小したいと考えています。

いつか、jPanel と jLable が実際のサイズに戻ってきます。:(

これを修正するのを手伝ってください

前もって感謝します!

これは私のコードです:

    private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {                                      

    jPanel2.setSize(new Dimension(jSlider2.getValue(), jSlider2.getValue()));
    jLabel3.setSize(new Dimension(jSlider2.getValue(), jSlider2.getValue()));
    jPanel2.repaint();
    jLabel2.repaint();
    BufferedImage scaledImg = Scalr.resize(img, jLabel3.getHeight());
    ImageIcon imageIcon = new ImageIcon(scaledImg);
    jLabel3.setIcon(imageIcon);

} 
4

2 に答える 2

1

の使用を検討する必要があると思いますComponentListener。問題のラベルまたはパネルにリスナーを追加し、componentResizedが呼び出されたときに、コンテンツを新しいサイズにスケーリングします。(上記のコードの最後の 3 行は、componentResized実装の本体を形成できます)。

また、これらに関するメモ:

jPanel2.repaint();
jLabel2.repaint();

このrepaintメソッドは、可能な場合にコンポーネントを再描画するように Swing に要求するだけです。「インライン」再描画は行いません。

于 2013-11-13T11:29:38.867 に答える
0

友よ、私は答えを見つけました!それは非常に簡単です. 私は単一のjDesktopPaneを追加しています! jlable と jpanel が jDesktopPane にあるとき、それはうまくいきました! (jframe と jPanel では、この jLable と jPanel を更新できません)

皆さんありがとう!:)

于 2013-11-13T11:39:23.393 に答える