Java按钮创建无法正常工作

时间:2012-10-18 07:54:30

标签: java swing jframe awt

这是我的程序。这个程序只是在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”按钮和其他按钮,我无法在窗格中看到。

3 个答案:

答案 0 :(得分:4)

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

  

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

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

答案 1 :(得分:3)

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

首先,在您完成向frame.setVisible(true)添加按钮后致电pane

第二种是打电话

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

将所有按钮添加到pane

答案 2 :(得分:0)

我可以看到按钮(A-Z)。我无法重现你的问题。 enter image description here