如果您有Image
,您可以调用getScaledInstance
来检索调整大小的图像。
如果你有一个ImageIcon
,你可以调用getImage()
它,检索一个Image
,然后使用上面建议的解决方案。
getScaledInstance
返回 an Image
,您可以将其包装回 anImageIcon
并设置在 aJButton
或 a上JLabel
。
所以,我会创建尽可能高分辨率的图像,然后将它们缩小到适当的分辨率。
这是一个小片段(灵感来自您开始的@mKorbel 解决方案):
import java.awt.BorderLayout;
import java.awt.Image;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ResizeIconInButton extends JFrame {
private static final long serialVersionUID = 1L;
private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg";
private JButton myButton = new JButton();
public ResizeIconInButton() throws MalformedURLException {
myButton.setIcon(new ImageIcon(new ImageIcon(new URL(IMAGE_PATH)).getImage().getScaledInstance(600, 400, Image.SCALE_SMOOTH)));
add(myButton, BorderLayout.CENTER);
setTitle("Resize Icon In Button");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
ResizeIconInButton main = new ResizeIconInButton();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
});
}
}
小提示:不建议扩展 JFrame,但我尝试尽可能接近原始代码。