Java 显示图标

Java 显示图标,java,swing,Java,Swing,我试图使用grouplayout和Jlabel在java项目中显示一组图标,但问题是,当我运行项目时,我得到了这个图标 我想这样显示它,我还需要最小化图标。 这是我的密码: import java.awt.Container; import java.awt.EventQueue; import javax.swing.GroupLayout; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.s

我试图使用grouplayout和Jlabel在java项目中显示一组图标,但问题是,当我运行项目时,我得到了这个图标

我想这样显示它,我还需要最小化图标。

这是我的密码:

import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JLabel;

public class ImageIconLabelEx extends JFrame {

    public ImageIconLabelEx() {

        initUI();
    }

    private void initUI() {

        JLabel lbl1 = new JLabel(new ImageIcon("imgs/Empty.png"));
        JLabel lbl2 = new JLabel(new ImageIcon("imgs/Empty.png"));
        JLabel lbl3 = new JLabel(new ImageIcon("imgs/Empty.png"));
        JLabel lbl4 = new JLabel(new ImageIcon("imgs/Empty.png"));
        JLabel lbl5 = new JLabel(new ImageIcon("imgs/Empty.png"));
        JLabel lbl6 = new JLabel(new ImageIcon("imgs/Empty.png"));
        JLabel lbl7 = new JLabel(new ImageIcon("imgs/Full.png"));
        JLabel lbl8 = new JLabel(new ImageIcon("imgs/Full.png"));
        JLabel lbl9 = new JLabel(new ImageIcon("imgs/Full.png"));
        JLabel lbl10 = new JLabel(new ImageIcon("imgs/Full.png"));

        createLayout(lbl1, lbl2, lbl3, lbl4, lbl5, lbl6, lbl7, lbl8, lbl9,lbl10 );


        setTitle("Icons");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    private void createLayout(JComponent... arg) {

        Container pane = getContentPane();
        GroupLayout gl = new GroupLayout(pane);
        pane.setLayout(gl);        

        gl.setAutoCreateContainerGaps(false);
        gl.setAutoCreateGaps(true);

        gl.setHorizontalGroup(gl.createSequentialGroup()
                .addComponent(arg[0])
                .addComponent(arg[1])
                .addComponent(arg[2])
                .addComponent(arg[3])
                .addComponent(arg[4])
                .addComponent(arg[5])
                .addComponent(arg[6])
                .addComponent(arg[7])
                .addComponent(arg[8])
                .addComponent(arg[9])

        );

        gl.setVerticalGroup(gl.createParallelGroup()
                .addComponent(arg[0])
                .addComponent(arg[1])
                .addComponent(arg[2])
                .addComponent(arg[3])
                .addComponent(arg[4])
                .addComponent(arg[5])
                .addComponent(arg[6])
                .addComponent(arg[7])
                .addComponent(arg[8])
                .addComponent(arg[9])

        );

        pack();
    }    

    public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            ImageIconLabelEx ex = new ImageIconLabelEx();
            ex.setVisible(true);
        });
    }
}

不要使用组布局。这是一种更复杂的使用方法,如果使用了错误的约束,则会得到错误的结果

相反,使用包装在面板中的
GridLayout
来保留图标的大小:

比如:

JPanel labelPanel = new JPanel( new GridLayout(0, 5) );
labelPanel.add(label1);
labelPanel.add(label2);
...
JPanel wrapper = new JPanel(); // defaults to FlowLayout
wrapper.add( iconPanel );
frame.add( wrapper );
我还需要最小化图标


不确定这意味着什么,但如果要更改需要使用
ImageIO
读取每个图像的大小,然后可以使用
image.getScaledInstance(…)
方法调整图像大小。然后使用缩放图像创建图像图标。

不清楚要更改什么。问题是使用了错误的图像吗?