Java setContentPane()可以工作,但是getContentPane().add()不能';行不通

Java setContentPane()可以工作,但是getContentPane().add()不能';行不通,java,swing,frame,layout-manager,contentpane,Java,Swing,Frame,Layout Manager,Contentpane,这是我的密码。当我setContentPane(panel)时它工作,但当我getContentPane().add(panel)时它不工作 为什么第二种方法不起作用?(它什么也没给我看) publicmyframe(){ 最终JFrame=新JFrame(); frame.setLayout(新的BorderLayout()); frame.setresizeable(false); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)

这是我的密码。当我
setContentPane(panel)
时它工作,但当我
getContentPane().add(panel)
时它不工作

为什么第二种方法不起作用?(它什么也没给我看)

publicmyframe(){
最终JFrame=新JFrame();
frame.setLayout(新的BorderLayout());
frame.setresizeable(false);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setFont(新字体(“Comic Sans MS”,Font.BOLD,12));
JMenuBar mnuBar=新的JMenuBar();
JMenu mnu1=新JMenu(“aaa”);
mnu1.setMnemonic(KeyEvent.VK_E);
JMenuItem menuItem=新的JMenuItem(“插入位置”,KeyEvent.VK_T);
menuItem.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
计数=0;
jt=新阵列列表[4];
对于(int i=0;i<4;i++)
jt[i]=新的ArrayList();
panel=新的JPanel();
面板设置位置(0,0);
面板设置尺寸(d.宽度,d.高度);
panel.setLayout(空);
JButton add=新JButton(“lllll”);
添加.设置大小(120,80);
添加设置位置(250100);
add.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
对于(int i=0;i<4;i++){
JTextField jt1=新的JTextField(20);
jt1.设置尺寸(150,30);
jt1.设置位置(450+i*200,80+计数*50);
jt1.setVisible(真);
jt[i].新增(jt1);
面板。添加(jt1);
}
计数++;
frame.repaint();
}
});
面板。添加(添加);
JButton confirm=新JButton(“ccc”);
确认。设置尺寸(120,80);
确认设置位置(250200);
confirm.addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件arg0){
计数=0;
对于(int j=0;j
现有contentpane的
布局
,导致您的面板大小不正确,无法显示。比较现有contentpane、JFrame和您的JPanel的布局,并注意它们之间的差异。

摘自:

指定组件的位置(例如,
BorderLayout.LINE\u END
)作为
add
方法的参数之一。如果由
BorderLayout
对象控制的容器中缺少此组件,请确保已指定该组件的位置,并且没有其他组件放置在同一位置

frame.getContentPane().add(panel);
据我所知,你有

frame.setLayout(new BorderLayout());
但是,您没有指定它的位置

frame.getContentPane().add(panel);
试试看

frame.getContentPane().add(panel, BorderLayout.CENTER);

另外,我不确定以下操作的顺序是否相关

panel = new JPanel();
panel.setLocation(0, 0);
panel.setSize(d.width, d.height);
panel.setLayout(null);
但是您可以直接在构造函数上设置布局

panel = new JPanel(null);
而且,由于面板将被插入到由布局管理器控制的容器中,因此不需要指定其位置。至于尺寸,您可以指定其首选尺寸,尽管有些人认为这不是一个好的做法

panel.setPreferredSize(new Dimension(d.width, d.height));

我想把我的按钮放在面板上。我应该使用什么布局?“我想在我的面板中任意放置按钮”使用
任意布局
。好吧,不,只是开玩笑。但是每个布局背后都有某种形式的逻辑,这种逻辑应该用J2SE布局管理器中的一种来表示。2) 自定义布局管理器,或3)布局管理器的组合。-哈哈!我的任意布局现在听起来不那么傻了,是吗?事实上,你应该决定如何布局按钮和面板,然后使用不同的布局管理器组合来实现这一点。