将JButton数组添加到JPanel中(按钮不可见)

3

我正在使用Java创建一个简单的计算器。为此,我创建了一个JButton数组并将它们添加到JPanel中。

问题: 按钮不可见。

我还添加了一个单独的JLabel和一个单独的JButton进行测试,它们显示正常。

代码如下:

package test;

import java.awt.BorderLayout;
import javax.swing.*;

public class Test {

    JLabel testLabel = new JLabel("Test label", SwingConstants.CENTER);
    JButton testButton = new JButton("Test button");

    JButton buttons[];

    Test() {

        JFrame frame = new JFrame("Calculator");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();  

        for (int i = 0; i > 15; i++) {

            buttons[i] = new JButton(Integer.toString(i));
            panel.add(buttons[i], BorderLayout.CENTER);

        }

        panel.add(testButton, BorderLayout.CENTER);
        panel.add(testLabel, BorderLayout.CENTER);

        frame.setSize(500, 500);

        frame.add(panel, BorderLayout.CENTER);

        frame.setVisible(true);
    }


    public static void main(String[] args) {

        Test cTest = new Test();

    }

}

我做错了什么?


1
请注意,JPanel 的默认布局管理器是 FlowLayout 而不是 BorderLayout - Arnaud
1
注意2:如果面板的布局管理器设置为BorderLayout,您仍然只会看到最后一个组件,因为所有组件都是使用BorderLayout.CENTER添加的。 - user85421
3个回答

2
问题在于您的for循环条件是无效的。请用<替换>:语句0 > 15永远不会被评估为true,这就是为什么您的循环从未开始迭代的原因。
for(int i = 0; i < 15; i++)

在给数组赋值之前,您必须使用new关键字创建数组。否则,您将会得到一个NullPointerException

buttons = new JButton[15];

2
首先,我认为你的for循环应该像这样:
for (int i = 0; i < 15; i++)

并且,在此之后,您需要初始化按钮的引用。
JButton buttons[] = new JButton[15];

0
通常情况下,当您使用for循环时,您必须为每个循环初始化对象。 例如,如果您有一个TextView,您将不得不执行以下操作:
TextHeaders[i] = new TextView([activity_name].this);

针对您的问题,

buttons[i] = new JButton (this);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接