我正在写国际象棋程序。为了显示棋盘,我使用了两个JPanel
s:
JLabel
数组因此,我需要将两个面板放在一起。因此我目前正在使用JLayeredPane
。但问题是我只能同时查看其中一个图层。
我目前的构造函数代码是:
public ChessBoard(){
setLayout(new FlowLayout());
gamescreen = new JLayeredPane();
gamescreen.setPreferredSize(new Dimension(200,200));
chessboard = new JPanel(new GridBagLayout());
chessmen = new JPanel(new GridBagLayout());
//chessboard.setLocation(0, 0);
//chessmen.setLocation(0,0);
chessboardImage = new ImageIcon(getClass().getResource("chessboard.jpg"));
chessboardDisplay = new JLabel(chessboardImage);
chessboard.add(chessboardDisplay);
GridBagConstraints constraint = new GridBagConstraints();
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
imageSet[i][j] = new ImageIcon(getClass().getResource(""+i+(j+1)+".png"));
image = imageSet[i][j].getImage().getScaledInstance(100, 100, Image.SCALE_SMOOTH);
imageSet[i][j]= new ImageIcon(image);
}
}
for(int i=0;i<2;i++){
constraint.gridy=i+3000;
for(int j=0;j<2;j++){
chessmenPos[i][j] = new JLabel(imageSet[i][j]);
constraint.gridx=j;
chessmen.add(chessmenPos[i][j],constraint);
}
chessboard.setBounds(0, 0, 200, 200);
chessmen.setBounds(0, 0, 200, 200);
gamescreen.add(chessboard, 1);
gamescreen.add(chessmen, 0);
gamescreen.setOpaque(false);
chessboard.setVisible(true);
chessmen.setVisible(true);
add(gamescreen);
}
EventHandling eventHandler = new EventHandling();
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
chessmenPos[i][j].addMouseListener(eventHandler);
}
我哪里出错了,我可以做些什么改变?
答案 0 :(得分:2)
但问题是我只能同时查看其中一个图层。
顶层需要透明。所以你需要:
chessmen.setOpaque( false );
您可以查看:Asking for some clarification in java about jlabel and parent以获取简单棋盘的示例。它使用略有不同的方法。每个方块都是一个组件。