为什么JFrame只能放入两个JPanel

一入IT深似海 2011-11-09 04:46:37
代码如下,不知道为什么,只能显示第一个jpanel和最后一个jpanel,这是为什么,高手帮帮忙

package swing;

import java.awt.Color;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class test2 extends JFrame{

/**
*
*/
private static final long serialVersionUID = 1L;
private JFrame frame;

public test2() {
// TODO Auto-generated constructor stub
frame = new JFrame();
//panel=(JPanel) frame.getContentPane();
//JPanel panel=new JPanel();
//panel.setLayout(new FlowLayout());
//panel.setOpaque(false);

JPanel jPanel=new JPanel();
JPanel jPanel2=new JPanel();
JPanel jPanel3=new JPanel();
JPanel jPanel4=new JPanel();

jPanel.setLayout(null);
jPanel2.setLayout(null);
jPanel3.setLayout(null);
jPanel4.setLayout(null);

jPanel.setSize(500, 200);
jPanel2.setSize(500, 200);
jPanel3.setSize(500, 200);
jPanel4.setSize(500, 100);

//jPanel.setBounds(100, 0, 100, 20);
JButton jButton=new JButton("第一个jpanel");
JButton jButton2=new JButton("第二个jpanel");
JButton jButton3=new JButton("第三个jpanel");
JButton jButton4=new JButton("第四个jpanel");

jButton.setBounds(0, 0, 200, 20);
jButton2.setBounds(0, 200, 200, 20);
jButton3.setBounds(0, 400, 200, 20);
jButton4.setBounds(0, 600, 200, 20);

jPanel.add(jButton);
jPanel2.add(jButton2);
jPanel3.add(jButton3);
jPanel4.add(jButton4);

jPanel.setBackground(Color.blue);
jPanel2.setBackground(Color.white);
jPanel3.setBackground(Color.yellow);
jPanel4.setBackground(Color.gray);

frame.add(jPanel);
frame.add(jPanel2);
frame.add(jPanel3);
frame.add(jPanel4);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 700);
frame.setVisible(true);


}

public static void main(String[] args) {
new test2();
}

}
...全文
610 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
bryand24 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qinfeiji 的回复:]
引用 14 楼 bryand24 的回复:

引用 13 楼 qinfeiji 的回复:
引用 12 楼 qinfeiji 的回复:

引用 11 楼 bryand24 的回复:

引用 8 楼 qinfeiji 的回复:
引用 2 楼 bryand24 的回复:

确实是被覆盖了,你的布局有点问题,试试XYLayout

这个方法怎么样,可否写个样例给我参考一下


……
[/Quote]

一起讨论学习
一入IT深似海 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bryand24 的回复:]

引用 13 楼 qinfeiji 的回复:
引用 12 楼 qinfeiji 的回复:

引用 11 楼 bryand24 的回复:

引用 8 楼 qinfeiji 的回复:
引用 2 楼 bryand24 的回复:

确实是被覆盖了,你的布局有点问题,试试XYLayout

这个方法怎么样,可否写个样例给我参考一下


frame.setLayout(new XYL……
[/Quote]
搞定了,哈哈,谢谢了,多多关照哈
bryand24 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qinfeiji 的回复:]
引用 2 楼 bryand24 的回复:

确实是被覆盖了,你的布局有点问题,试试XYLayout

这个方法怎么样,可否写个样例给我参考一下
[/Quote]

frame.setLayout(new XYLayout());
frame.add(jPanel,new XYConstraints(0, 0, 200, 20));
frame.add(jPanel2,new XYConstraints(0, 200, 200, 20));
frame.add(jPanel3,new XYConstraints(0, 400, 200, 20));
frame.add(jPanel4,new XYConstraints(0, 600, 200, 20));
这个换掉你的就行了
不过XYLayout是需要jbcl.jar包支持的
建议你以后多用这个布局,非常精细。
xierong2011 2011-11-10
  • 打赏
  • 举报
回复

package novemberTestDay;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JFrame {

/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test frame = new Test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame
*/
public Test() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.NORTH);

final JPanel panel_1 = new JPanel();
panel.add(panel_1);

final JButton button = new JButton();
button.setText("New JButton");
panel_1.add(button);

final JPanel panel_2 = new JPanel();
panel.add(panel_2);

final JButton button_1 = new JButton();
button_1.setText("New JButton");
panel_2.add(button_1);

final JPanel panel_3 = new JPanel();
panel.add(panel_3);

final JButton button_2 = new JButton();
button_2.setText("New JButton");
panel_3.add(button_2);

final JPanel panel_4 = new JPanel();
panel.add(panel_4);

final JButton button_3 = new JButton();
button_3.setText("New JButton");
panel_4.add(button_3);
//
}

}


你看看 这个行不
xierong2011 2011-11-10
  • 打赏
  • 举报
回复
建议楼主,用一些插件开发Swing吧 你刚开始学的话,这样的问题会很烦的 Designer,netBeans...
一入IT深似海 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bryand24 的回复:]

确实是被覆盖了,你的布局有点问题,试试XYLayout
[/Quote]
这个方法怎么样,可否写个样例给我参考一下
一入IT深似海 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hao901017 的回复:]

被覆盖掉了
推荐在JFrame的主面板上面添加组件:
JPanel panel = (JPanel)frame.getContentPane();
在调用JPanel的add方法
[/Quote]
能不能修改一下,看看你的代码
一入IT深似海 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mengxiangyue 的回复:]

JFrame的默认布局管理器是BoderLayout 你不把布局管理器设置为null 你下面的setBounds根本就不起作用 相当于你把几个Panel都放到了Center上 当然覆盖了
[/Quote]
设置了null,如代码:
JPanel jPanel=new JPanel();
JPanel jPanel2=new JPanel();
JPanel jPanel3=new JPanel();
JPanel jPanel4=new JPanel();

jPanel.setLayout(null);
jPanel2.setLayout(null);
jPanel3.setLayout(null);
jPanel4.setLayout(null);
bryand24 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qinfeiji 的回复:]
引用 12 楼 qinfeiji 的回复:

引用 11 楼 bryand24 的回复:

引用 8 楼 qinfeiji 的回复:
引用 2 楼 bryand24 的回复:

确实是被覆盖了,你的布局有点问题,试试XYLayout

这个方法怎么样,可否写个样例给我参考一下


frame.setLayout(new XYLayout());
frame.add(jPa……
[/Quote]

你用的什么工具?你确认下你的包导入进去没 如果是Eclipse、或者MyEclipse在java build path添加下那个包才行。
一入IT深似海 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qinfeiji 的回复:]

引用 11 楼 bryand24 的回复:

引用 8 楼 qinfeiji 的回复:
引用 2 楼 bryand24 的回复:

确实是被覆盖了,你的布局有点问题,试试XYLayout

这个方法怎么样,可否写个样例给我参考一下


frame.setLayout(new XYLayout());
frame.add(jPanel,new XYConstraints(0,……
[/Quote]
打错了,是没有那个XYLayout方法,我在好好看看
一入IT深似海 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bryand24 的回复:]

引用 8 楼 qinfeiji 的回复:
引用 2 楼 bryand24 的回复:

确实是被覆盖了,你的布局有点问题,试试XYLayout

这个方法怎么样,可否写个样例给我参考一下


frame.setLayout(new XYLayout());
frame.add(jPanel,new XYConstraints(0, 0, 200, 20));
frame.add……
[/Quote]
我加入了jbcl.jar包之后,美元后XYLayout()方法,奇怪了,呵呵,谢谢你的指导,我好好看看
ncist_jianeng 2011-11-09
  • 打赏
  • 举报
回复
懂了,原来是JFrame窗体的默认布局是BorderLayout布局。窗体的上面是一个很窄的矩形区域,用来放置菜单条。菜单条区域下面用来放置组件,如果窗体没有添加菜单条,菜单条区域将由其它组件占用!所以就只有两个组件显示了。。。。
ncist_jianeng 2011-11-09
  • 打赏
  • 举报
回复
我以为只能显示一个,为什么就显示两个了呢?求解
孟祥月 2011-11-09
  • 打赏
  • 举报
回复
JFrame的默认布局管理器是BoderLayout 你不把布局管理器设置为null 你下面的setBounds根本就不起作用 相当于你把几个Panel都放到了Center上 当然覆盖了
bryand24 2011-11-09
  • 打赏
  • 举报
回复
确实是被覆盖了,你的布局有点问题,试试XYLayout
「已注销」 2011-11-09
  • 打赏
  • 举报
回复
被覆盖掉了
推荐在JFrame的主面板上面添加组件:
JPanel panel = (JPanel)frame.getContentPane();
在调用JPanel的add方法

51,395

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧