1

我有一个由 16 个按钮组成的网格,它们代表骰子。添加分数时,我希望在中间弹出一个 JLabel 并显示添加的分数。16 个按钮和一个标签都在一个 JLabel 中。为什么按钮总是显示在 JLabel 的顶部,即使 JLabel 设置为可见?

感谢您的任何帮助!


图片

JButtons 可见,JLabel 不可见:
http://i.stack.imgur.com/0r5h2.png

当 JButtons 设置为 false 时,会看到 JLabel:
http://i.stack.imgur.com/cLqZB.png


代码

这是我的代码的构造函数。如果按钮可见,则不会显示标签。

        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);
        }
4

1 回答 1

2

在你的上一篇文章中,我说:

基本上,最后添加的组件是首先绘制的。

但是,我随后发布了示例代码(与您的代码相同):

c.add(button);
c.add(label);

当然,我的意思是发布:

c.add(label);
c.add(button);

当然,这仍然是一种糟糕的方式来做你想做的事。您不应该使用空布局。您不应该使用 setBounds() 将组件定位在面板上。

我没有玻璃或任何东西的背景,

这就是为什么我给了你教程的链接。它包含工作示例。

但我希望以最简单的方式做到这一点。

这就是为什么我给了你教程的链接。有时您需要学习基础知识才能利用 Swing 所提供的功能。由于您不知道 Swing 的工作原理,因此您不知道当前方法的缺点。我们试图在您的设计阶段开始时为您指明正确的方向,这样您将来遇到问题时就不必重新审视设计,并且更改变得更加困难。

于 2013-06-12T15:47:48.490 回答