Java JLabel背景图像。。。奇怪的行为?

Java JLabel背景图像。。。奇怪的行为?,java,swing,user-interface,jframe,jlabel,Java,Swing,User Interface,Jframe,Jlabel,我有一个图像必须组成一个8x8网格,因此它是电路板的背景 有人告诉我,使用ImageIcon和JLabel可以实现这一点,我尝试过,但似乎不起作用 它不允许我向它添加组件(piece,它也是一个JLabel) 另外,当程序运行时,我点击一个方块,它就会消失,这并不理想,因为它应该是背景 代码如下: for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) {

我有一个图像必须组成一个8x8网格,因此它是电路板的背景

有人告诉我,使用ImageIcon和JLabel可以实现这一点,我尝试过,但似乎不起作用

  • 它不允许我向它添加组件(piece,它也是一个JLabel)
  • 另外,当程序运行时,我点击一个方块,它就会消失,这并不理想,因为它应该是背景
代码如下:

      for (int i = 0; i < 8; i++)
       {
        for (int j = 0; j < 8; j++)
        {
            square=new JLabel();
            square.setIcon(icon);
            chessBoard.add( square );
        }
       }
for(int i=0;i<8;i++)
{
对于(int j=0;j<8;j++)
{
square=新的JLabel();
正方形。设置图标(图标);
棋盘。加(正方形);
}
}
完整代码:

我是不是对这个背景图像做了什么可怕的错误


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

您在找这样的东西吗

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();
            }
        });
    }
}
import java.awt.*;
导入javax.swing.*;
公共类棋盘扩展JFrame{
私人JPanel小组;
公共棋盘(){
panel=新的JPanel();
panel.setLayout(新的GridLayout(8,8,0,0));//创建电路板
//添加jlabel
对于(int i=0;i<64;i++){
JLabel标签=新的JLabel();
label.setIcon(
新的图像图标(getClass().getResource(“images/face.png”);
面板。添加(标签);
}
//将面板添加到JFrame
本条添加(面板);
这个包();
此.setVisible(true);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
公共静态void main(字符串[]args){
试一试{
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}捕获(例外e){
e、 printStackTrace();
}
invokeLater(new Runnable()){
@凌驾
公开募捐{
新棋盘();
}
});
}
}

如何加载图像?图像没有出现吗?您只能将一个IconImage设置为一个JLabel,因此如果您想要64(8 X 8)个图像,则需要64个JLabel。如果只有一个大图像,即网格(8 X 8),则会更简单。只是一个想法。这些图像看起来很好,正是我所需要的,但是我感觉运动代码正在影响它,因为我可以拖动方块。但它应该是这些作品的背景。我要去掉
JLayeredPane
。只需暂时使用
GridLayout
。您可以将其他组件添加到
JLabel
,因此应该开始将网格标签的布局设置为类似
BorderLayout
。然后,当你点击时,你可以简单地将你的
JLabel
片段添加到其中。那么我应该把鼠标听筒放在哪里呢?鼠标拖动还能用吗?因为它们会被攻击到JLayeredPane。此帖子显示了在棋盘上拖动图像的一种方法: