我有一个带有包含图像的标签的面板。
我知道如何调整图像大小,但是我希望在调整大小时包含面板时自动调整大小 - 以保持大致相同的相对大小。
我应该在哪里调用我的调整大小功能?
public JPanel slidePane;
public JLabel iconLbl;
iconLbl = new JLabel();
iconLbl.setIcon(getImage(slides.get(0),this));
iconLbl.setA lignmentX(Component.CENTER_ALIGNMENT);
slidePane.add(iconLbl);
//
public static ImageIcon getImage(String ImageName, SlideShow ss) {
java.net.URL imgURL = ss.getClass().getClassLoader().getResource(ImageName);
ImageIcon image = new ImageIcon( imgURL);
//JOptionPane.showMessageDialog(null, "Width: " + image.getIconWidth() + " Height: " + image.getIconHeight());
BufferedImage bi = new BufferedImage(image.getIconWidth(), image.getIconHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
image.paintIcon(null, g, 0,0);
g.dispose();
BufferedImage resizedimage;
try {
JOptionPane.showMessageDialog(null,"SIZING: "+ss.starterModule.Tabs.getWidth()+" "+ ss.starterModule.Tabs.getWidth());
resizedimage = myResize(bi,ss.starterModule.Tabs.getWidth(), ss.starterModule.Tabs.getWidth());
} catch (Exception e) {
resizedimage=myResize(bi,600, 700);
}
ImageIcon resizedicon=new ImageIcon(resizedimage);
return resizedicon;
}
public static BufferedImage myResize(BufferedImage image, int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(image, 0, 0, width, height, null);
g2d.dispose();
return bi;
}
答案 0 :(得分:0)
使用这样的布局管理器:
iconLbl = new JLabel() {
@Override
public void paintComponent(Graphics g) {
g.drawImage(...);
}
}
sidePanel.setLayout(new BorderLayout());
sidePanel.add(iconLbl, BorderLayout.CENTER);
有不同的布局管理器,但如果它太复杂,我建议使用一个GUI构建器,就像在NetBeans或Eclipse中找到的那样。
drawImage()函数可以根据需要动态缩放图像,因此您不需要myResize()。有关参数,请参见Graphics.drawImage()。