1

実際、ボタンの画像を変更する方法は既に知っていますが、問題はサイズにあります。

新しいアイコンに変更しましたが、サイズを維持したいのですが、この変更についてアドバイスをお願いします。

画像を変更して設定する前にボタンのサイズを取得しようとしましたが、サイズはキャッシュされず、視覚的にも変化しません。

4

1 に答える 1

3

これは、ボタンが固定サイズのアイコンを使用しているためです。Java でこれを行う場合は、次のようにする必要があります。

  • .getImage()ImageIcon オブジェクトまたは他の場所から
  • 新しいものを作るBufferedImage
  • 画像のスケーリングされたバージョンをBufferedImage(必要なサイズで)に描画します
  • ImageIcon新しい画像を使用して新しいものを作る
  • ImageIconそれをボタンに送信します

最初の 3 つのステップは難しそうに見えますが、それほど難しくはありません。開始する方法は次のとおりです。

/**
 * Gets a scaled version of an image.
 * 
 * @param original0 original Image
 * @param w0 int new width
 * @param h0 int new height
 * @return {@link java.awt.Image}
 */
public Image getImage(Image original0, int w0, int h0) {
    // Check for sizes less than 1
    w0 = (w0 < 1) ? 1 : w0;
    h0 = (h0 < 1) ? 1 : h0;

    // The new scaled image (empty for now.)
    // Uses BufferedImage to support scaling and rendering.
    final BufferedImage scaled = new BufferedImage(w0, h0, BufferedImage.TYPE_INT_ARGB);

    // Create a canvas to draw with, in the new image.
    final Graphics2D g2d = scaled.createGraphics();

    // Try to prevent aliasing (if your image doesn't look good, read more about RenderingHints, they're not too hard)
    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

    // Use the canvas to draw the scaled version into the empty BufferedImage
    g2d.drawImage(original0, 0, 0, w0, h0, 0, 0, original0.getWidth(null), original.getHeight(null), null);

    // Drawing is finished, no need for canvas anymore
    g2d.dispose();

    // Done!
    return scaled;
}

ただし、代わりに外部アイコン ファイルのサイズを変更し、アプリケーションに余分な作業を与えない方がよいでしょう。

于 2012-11-10T00:09:50.827 に答える