JLabel背景图片......奇怪的行为?

时间:2013-03-21 02:47:43

标签: java swing user-interface jframe jlabel

我的图像必须构成8x8网格,因此它是电路板的背景。

我被告知可以使用ImageIcon和JLabel来做到这一点,我尝试了它并且它似乎不起作用。

  • 它不允许我向其添加组件(片段,也是JLabel)。
  • 当程序运行时我单击一个方块 - 它会消失,这不是理想的,因为它应该是背景。

以下是代码:

      for (int i = 0; i < 8; i++)
       {
        for (int j = 0; j < 8; j++)
        {
            square=new JLabel();
            square.setIcon(icon);
            chessBoard.add( square );
        }
       }

完整代码:http://pastebin.com/YdavUmGz

我是否对这张背景图片做了一些可怕的错误?

任何帮助将不胜感激,提前谢谢。

1 个答案:

答案 0 :(得分:3)

你在找这样的东西吗?

import java.awt.*;
import javax.swing.*;

public class ChessBoard extends JFrame {

    private JPanel panel;

    public ChessBoard() {
        panel = new JPanel();
        panel.setLayout(new GridLayout(8, 8, 0, 0)); //Create the board
        //Add JLabels
        for (int i = 0; i < 64; i++) {
            JLabel label = new JLabel();
            label.setIcon(
                    new ImageIcon(getClass().getResource("images/face.png")));
            panel.add(label);
        }
        //Add the panel to the JFrame
        this.add(panel);
        this.pack();
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(
                    UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ChessBoard();
            }
        });
    }
}

enter image description here