如何从我的jlabel获取图像自动缩放或调整大小到JLabel的大小

时间:2014-12-05 19:52:19

标签: java image swing awt jlabel

我试图将图像添加到JLabel,我遇到了一个问题,即JLabel的图像很大,所以我正在寻找一种方法使图像自动缩放到JLabel的大小。

这是我调用GUImain类的代码主体:

public class Main 
{
    public static void main(String[] args)
    {
        int i = 0;
        int t = 0;
        int st = 0;
        int h = 0;

        Texts textObject = new Texts();
        textObject.TextList();

        Commands commandObject = new Commands();
        commandObject.commands();

        GUImain guiObject = new GUImain();
        guiObject.displayGUI();
    }
}

这是我的GUImain类的代码,我只会包含一个图像按钮,因为我的代码中有很多对象。

import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JTextPane;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JScrollBar;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

    public class GUImain 
    {
        private JFrame frame;
        private JTextField textField;
        private ImageIcon image1;

    public void displayGUI() 
    {
        this.frame.setVisible(true);
    }

    //Launch the application.
    public static void main(String[] args)
    {
        GUImain window = new GUImain();
    }

    //Create the application.
    public GUImain() 
        {
        frame = new JFrame();
        frame.setBounds(100, 100, 611, 471);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        ...

        JLabel lblHunger = new JLabel();
        Image img2 = new ImageIcon(this.getClass().getResource("/Food.png")).getImage();
        lblHunger.setIcon(new ImageIcon(img2));
        lblHunger.setBounds(211, 58, 50, 50);
        panel.add(lblHunger);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

不要使用空布局!!!

Swing旨在与布局管理器一起使用。让每个组件确定其首选大小,然后让布局管理器根据布局管理器的规则调整组件的大小和位置。

您可以使用Darry'ls Stretch Icon而不是自定义绘画。图标将根据图标可用空间绘制。

  

我遇到了一个问题,即JLabel的图像很大

重读这部分问题。在这种情况下,您可能希望使用Image.getScaledInstance(...)方法将图像缩放到适当的大小。您可以使用常规Icon和相应的布局管理器。

  

我可以使用哪种布局轻松选择尺寸和物体的位置

您不应该选择组件的大小/位置。这是布局管理器的工作。阅读Layout Managers上的教程,并选择适合您要求的一个(或布局管理器组合)。