Java JButton更改图像并保持大小

Java JButton更改图像并保持大小,java,image,jbutton,imageicon,Java,Image,Jbutton,Imageicon,事实上,我已经知道如何更改按钮中的图像,但问题在于大小 我更改了新图标,但我想保留大小,但此更改请对此提供一些建议 我尝试在更改图像之前获取按钮的尺寸,然后进行设置,但大小不会缓存,并且视觉上也不会改变。这是因为按钮使用了一个固定大小的图标。如果您想在Java中实现这一点,您必须 .getImage()从ImageIcon对象或其他地方 创建一个新的buffereImage 将图像的缩放版本绘制到buffereImage(具有所需的大小) 使用新图像制作一个新的ImageIcon 将该图像图标

事实上,我已经知道如何更改按钮中的图像,但问题在于大小

我更改了新图标,但我想保留大小,但此更改请对此提供一些建议


我尝试在更改图像之前获取按钮的尺寸,然后进行设置,但大小不会缓存,并且视觉上也不会改变。

这是因为按钮使用了一个固定大小的图标。如果您想在Java中实现这一点,您必须

  • .getImage()
    从ImageIcon对象或其他地方
  • 创建一个新的
    buffereImage
  • 将图像的缩放版本绘制到
    buffereImage
    (具有所需的大小)
  • 使用新图像制作一个新的
    ImageIcon
  • 将该
    图像图标发送到按钮
前三步听起来很棘手,但也不算太糟糕。以下是一个让您开始的方法:

/**
 * 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;
}
/**
*获取图像的缩放版本。
* 
*@param original0原始图像
*@param w0 int新宽度
*@param h0 int新高度
*@return{@link java.awt.Image}
*/
公共图像getImage(图像原始0、int w0、int h0){
//检查尺寸是否小于1
w0=(w0<1)?1:w0;
h0=(h0<1)?1:h0;
//新缩放图像(暂时为空。)
//使用BuffereImage支持缩放和渲染。
最终BuffereImage scaled=新的BuffereImage(w0,h0,BuffereImage.TYPE_INT_ARGB);
//在新图像中创建要绘制的画布。
final Graphics2D g2d=scaled.createGraphics();
//尽量避免出现锯齿(如果你的图像看起来不好,请阅读更多关于渲染提示的内容,它们并不太难)
g2d.setRenderingHint(RenderingHits.KEY\u插值,RenderingHits.VALUE\u插值\u双线性);
//使用画布将缩放的版本绘制到空的BuffereImage中
g2d.drawImage(original0,0,0,w0,h0,0,0,original0.getWidth(null),original.getHeight(null),null);
//绘图完成,不再需要画布
g2d.dispose();
//完成了!
返回标度;
}

但是,最好改为调整外部图标文件的大小,不要给应用程序额外的工作。

是否需要缩放图像以适应按钮,或者调整按钮的大小?最好的建议是两者都不做,而是分发一组大小相同的图标。顺便说一句,图标的纵横比是否相同?