显示图标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显示图标相关的知识,希望对你有一定的参考价值。
我正在尝试使用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);
);
答案
不要使用GroupLayout。这是使用起来比较复杂的方法之一,如果使用错误的约束条件,则会得到不正确的结果。
相反,使用包裹在面板中的GridLayout
来保留图标的大小:
类似:
JPanel iconPanel = new JPanel( new GridLayout(0, 5) );
iconPanel.add(icon1);
iconPanel.add(icons2);
...
JPanel wrapper = new JPanel(); // defaults to FlowLayout
wrapper.add( iconPanel );
frame.add( wrapper );
以上是关于显示图标的主要内容,如果未能解决你的问题,请参考以下文章