我有一个16个按钮的网格,代表骰子。添加分数后,我希望JLabel在中间弹出并显示添加的分数。 16个按钮和一个标签都在一个JLabel中。为什么按钮总是显示在JLabel的顶部,即使JLabel设置为可见?
感谢您的帮助!
JButtons可见,JLabel不是:
当JButtons的setVisible为false时,可以看到JLabel:
这是我的代码的构造函数。如果按钮可见,则标签不会显示。
public Grid()
{
super();
setLayout(null);
setBounds(125,205,290,290);
setBackground(new Color(139,69,19));
setBorder(new LineBorder(Color.black,5));
for(int a = 0; a < piece.length; a ++)
{
for(int b = 0; b < piece[0].length; b ++)
{
piece[a][b] = new DiceButton(0,0,a,b,null);
piece[a][b].addActionListener(this);
add(piece[a][b]);
}
}
scoringVisual = new JLabel("+ 200");
scoringVisual.setBounds(110, 135, 70, 30);
scoringVisual.setFont(new Font("Arial Rounded MT Bold", Font.BOLD, 20));
scoringVisual.setOpaque(true);
scoringVisual.setBackground(new Color(0,87,0));
scoringVisual.setForeground(new Color(38,224,2));
scoringVisual.setHorizontalAlignment(JLabel.CENTER);
scoringVisual.setBorder(new LineBorder(Color.black,1));
add(scoringVisual);
}
答案 0 :(得分:2)
在你上次的帖子中我说:
基本上,添加的最后一个组件首先被绘制。
然而,我随后发布了示例代码(与您的代码相同):
c.add(button);
c.add(label);
当然我打算发帖:
c.add(label);
c.add(button);
当然,这仍然是一种做你想要的糟糕方式。您不应该使用null布局。您不应该使用setBounds()将组件放置在面板上。
我没有玻璃窗或其他任何背景,
这就是为什么我给你链接到教程。它包含工作的exmaples。
但我希望以最简单的方式做到这一点。
这就是为什么我给你链接到教程。有时您需要学习基础知识才能利用Swing提供的功能。由于你不知道Swing是如何工作的,所以你不知道当前方法的缺点。我们正试图在您的设计阶段开始时向您指出正确的方向,以便您在遇到问题时不必再重新考虑设计,并且变得更难。