package sizedFrame;
import java.awt.*;
import javax.swing.*;
public class SizedFrameTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new SizedFrame();
frame.setTitle("SizedFrame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
@SuppressWarnings("serial")
class SizedFrame extends JFrame
{
public SizedFrame()
{
// get screen dimensions
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
// set frame width, height and let platform pick screen location
setSize(screenWidth / 2, screenHeight / 2);
setLocationByPlatform(true);
// set frame icon
Image img = new ImageIcon("gdutelc.jpg").getImage();
setIconImage(img);
// set text
JTextField textField = new JTextField();
JPanel northPanel = new JPanel();
northPanel.setLayout(new GridLayout(2, 2));
northPanel.add(new JLabel("姓名: ", SwingConstants.RIGHT));
northPanel.add(textField);
northPanel.add(new JLabel("学号 ", SwingConstants.RIGHT));
northPanel.add(textField);
}
}
有两个原因如下:
第一,你的JPanel并没有添加到JFrame的容器内部;第二个原因,你的JFarme没有布局导致元素无法显示。
修正你的SizedFrame()方法如下,一头,一尾分别添加下面两段代码:
public SizedFrame() {
//先设置布局,可以容纳多个组件
setLayout(new BorderLayout());
........//中间不变
//再将JPanel添加到父类容器中
this.getContentPane().add(northPanel);
}
这样就能显示组件了,但是组件的布局可能不是那么美观,就要靠你自己调整了。