java make image使用包含面板调整大小

时间:2014-01-09 22:17:52

标签: java image autoresize resizable

我有一个带有包含图像的标签的面板。

我知道如何调整图像大小,但是我希望在调整大小时包含面板时自动调整大小 - 以保持大致相同的相对大小。

我应该在哪里调用我的调整大小功能?

    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;
    }

1 个答案:

答案 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()。