0

这是我的程序。这个程序只是使用java中的swings创建一个框架并首先创建一个网格并将按钮添加到该框架:

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

public class one {
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setSize(400,400);
        frame.getContentPane().setPreferredSize(new Dimension(500,500));
        frame.pack();
        frame.setVisible(true);
        Container pane=frame.getContentPane();
        pane.setLayout(new GridLayout(5,6));

        JButton[] buttons = new JButton[26];

        String  b[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        for(int i = 0; i<buttons.length; i++) {
            buttons[i] = new JButton(b[i]);
            buttons[i].setSize(80, 80);
            buttons[i].setActionCommand(b[i]);
            buttons[i].addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    String choice = e.getActionCommand();
                    JOptionPane.showMessageDialog(null, "You have clicked: "+choice);
                }
            });
            System.out.println("adding button\n");
            pane.add(buttons[i]);
        }

    }
    public static void main(final String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

该程序编译得很好。但是按钮创建我只能看到一个“A”按钮,其余按钮我无法在窗格中看到。

4

3 回答 3

4

事实证明,这似乎是一个竞争条件和/或系统相关类型问题,因为它适用于其他人。无论如何,java.awt.Container.add() 的 Javadoc声明:

此方法更改与布局相关的信息,因此使组件层次结构无效。如果容器已显示,则必须随后验证层次结构以显示添加的组件。

因此,您应该在添加所有组件后调用 pane.validate()(或者,正如 MadProgrammer 所说,在添加所有组件执行 setVisible() 调用)。

于 2012-10-18T08:11:39.807 回答
3

基本上有两种方法可以解决这个问题。

第一个是在frame.setVisible(true)您完成将按钮添加到pane.

二是打电话

pane.invalidate();
pane.repaint();

将所有按钮添加到pane

于 2012-10-18T08:04:01.393 回答
0

我可以看到按钮(AZ)。我无法重现您的问题。 在此处输入图像描述

于 2012-10-18T08:13:10.630 回答