Java JLabel背景图像。。。奇怪的行为?
我有一个图像必须组成一个8x8网格,因此它是电路板的背景 有人告诉我,使用ImageIcon和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++) {
- 它不允许我向它添加组件(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。此帖子显示了在棋盘上拖动图像的一种方法: