JFrame中添加JLabel顺序的问题
一个棋类游戏JFrame中,首先添加一个棋子的JLabel(内容是图标ImageIcon),用setBounds设置好位置,再添加一个棋盘的大JLabel,覆盖了刚刚棋子...
一个棋类游戏JFrame中,首先添加一个棋子的JLabel(内容是图标ImageIcon),用setBounds设置好位置,再添加一个棋盘的大JLabel,覆盖了刚刚棋子的坐标,此时可以正确显示(棋子在棋盘前显示)。但是如果把两个组件add的顺序颠倒后,棋子就不显示了,这是为什么?
public ChessPanel(){
Container con = this.getContentPane();
JLabel chess = new JLabel(new ImageIcon("..."));
JLabel panel = new JLabel(new ImageIcon("..."));
chess.setBounds();
panel.setBounds();
//下面两句顺序有什么问题?
con.add(panel );
con.add(chess);
} 展开
public ChessPanel(){
Container con = this.getContentPane();
JLabel chess = new JLabel(new ImageIcon("..."));
JLabel panel = new JLabel(new ImageIcon("..."));
chess.setBounds();
panel.setBounds();
//下面两句顺序有什么问题?
con.add(panel );
con.add(chess);
} 展开
2个回答
展开全部
这是你没有考虑到布局的原因,JFrame的默认布局是BorderLayout,每次放入的内容不加”东南西北中“参数的话就放到中心,这样每次后加的覆盖上次的。
应该用setLayout方法改变一下,对于棋盘,推荐用表格布局GridLayout
应该用setLayout方法改变一下,对于棋盘,推荐用表格布局GridLayout
追问
貌似不是这个问题啊。。。我用的就是GridLayout,只不过叙述问题的时候觉得不相关,没有写进来
追答
没错啊,你应该把棋盘设置成背景,然后把内容窗格设置成透明,用GridLayout怎么也不会重叠到一起的吧。我试过,下面是代码,你替换一下图片:
import java.awt.GridLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JFrameTest2 {
/**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame("测试");
frame.setSize(350, 340);
frame.setLocation(200, 200);
frame.setLayout(new GridLayout(2,3));
frame.add(new JLabel(new ImageIcon("test1.jpg"))); //棋子1
frame.add(new JLabel(new ImageIcon("test1.jpg"))); //棋子1
frame.add(new JLabel(new ImageIcon("test1.jpg"))); //棋子1
frame.add(new JLabel(new ImageIcon("test1.jpg"))); //棋子1
frame.add(new JLabel(new ImageIcon("test1.jpg"))); //棋子1
frame.add(new JLabel(new ImageIcon("test1.jpg"))); //棋子1
JPanel panel = (JPanel)frame.getContentPane();
panel.setOpaque(false);
ImageIcon image = new ImageIcon("big1.jpg"); //棋盘
JLabel back = new JLabel(image);
back.setBounds(0, 0, image.getIconWidth(), image.getIconHeight());
frame.getLayeredPane().add(back, new Integer(Integer.MIN_VALUE));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询