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