我正在努力使照片适合JLabel.我希望将图片尺寸缩小到更适合我的Swing JPanel的尺寸.
我尝试使用setPreferredSize但它不起作用.
我想知道是否有一种简单的方法可以做到这一点?我应该为此目的缩放图像吗?
我有一个JPanel带有彩绘背景图像和一个布局管理器,其中包含其他较小的图像,所有这些都在一个内部JFrame.背景图像非常大,我希望能够保持其纵横比,无论是在大型还是小型显示器上.
最终,我希望能够将我LayoutManager和它的细胞中的较小图像"粘合"到背景图片上.
我四处寻找资源,似乎很多例子都使用了,BufferedImage但我不是; 这会造成问题吗?我将在下面发布我的代码来绘制图像,如果我缺少任何信息,请告诉我.
public class MonitorPanel extends JPanel {
Image img;
public MonitorPanel() throws MalformedURLException {
//add components
try {
img = ImageIO.read(new File("src/customer_vlans.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void paintComponent(Graphics g)
{
//paint background image
super.paintComponent(g);
//g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
g.drawImage(img, 0, 0, this);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我应该提到我知道宽高比公式: 原始高度/原始宽度x新宽度=新高度 然而,我不知道如何正确使用它对我有利.
我想得到一个缓冲图像的缩放实例,我做了:
public void analyzePosition(BufferedImage img, int x, int y){
img = (BufferedImage) img.getScaledInstance(getWidth(), getHeight(), Image.SCALE_SMOOTH);
....
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage
at ImagePanel.analyzePosition(ImagePanel.java:43)
Run Code Online (Sandbox Code Playgroud)
然后我想要转换为ToolkitImage使用getBufferedImage我在其他文章中读到的方法.问题是没有类,例如sun.awt.image.ToolkitImage我无法投射它,因为Eclipse甚至没有看到这个类.我用Java 1.7和jre1.7.

我遇到了一个问题.我的图像太大,所以它扩大了相应的JMenuItem.我不想开发自行车
ImageIcon image = new ImageIcon(new ImageIcon("/home/template/img.jpg")
.getImage().getScaledInstance(32, 32, Image.SCALE_DEFAULT));
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以实现吗?