直接 getContentPane()和 JPanel contentPane = new JPanel() 有区别吗?为什么后者我的控件不会显示出来呢?

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Frame extends JFrame {

JPanel contentPane;

public Frame() {

    setTitle("esjypt");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(500, 300);
    setVisible(true);

    contentPane=new JPanel();
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JTextField txtfld=new JTextField();
    //txtfld.setVisible(true);
    contentPane.add(txtfld);
    JButton button=new JButton("按钮");
    //txtfld.setVisible(true);
    add(button);

    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            txtfld.setVisible(true);
            txtfld.setText("你按了按钮");
        }
    });


}

public static void main(String[] args) {
    Frame frame=new Frame();
}

}
这是使用第二种方法,为什么我的button不显示呢?

因为你contentPane.setLayout(null);把容器的布局设置为了null了,你往里面放组件是放不了的
改成contentPane.setLayout(new BorderLayout());
或者你不设置,Jpanel默认是FlowLayout布局你直接往里面加组件也是可以的