getContentPane().add(childcomponent)与setContentPane(pane) 与 组件、容器、布局管理器

本文介绍了JFrame中添加组件的方法,强调了Content Pane的作用,提供了通过getContentPane().add(childComponent)和setContentPane(pane)添加组件的方式。文章还详细讲解了AWT容器的层次结构,包括Frame和Panel,并探讨了布局管理,如顺序布局、边界布局、网格布局、卡片布局和网格包布局。此外,还展示了各种布局在实际应用中的例子。
摘要由CSDN通过智能技术生成

我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常。造成这个现象的原因:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?

JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。

对JFrame添加组件有两种方式: 
1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)

2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板

JPanel  contentPane=new  JPanel();//把其它组件添加到Jpanel中; 
frame.setContentPane(contentPane);//把contentPane对象设置成为frame的内容面板


10.2.1 容器 
  AWT容器分为两类:外部容器和内部容器。其中,外部容器一般会独立存在,例如Frame类;而内部容器则会嵌套在外部容器内部使用,例如Panel类。容器的层次结构如图10-2所示。 
   
   
  图10-2 AWT容器的层次结构 
  其中两个最常用的容器是Frame和Panel。在后面我们还要单独介绍Applet(一种特殊的Panel)。 
  框架(Frame):Frame是顶级窗口,可以显示标题,重置大小。 
  面板(Panel):面板提供了建立应用程序的空间。我们可以把图形元件(包括其他面板)放在一个面板上,然后把这个面板作为内部容器放在Frame等外部容器上。 
  容器类的常用方法包括: 
  add() 
  add(Component com) 
  add(Component, int index) 
  add(Component component, Object constraints) 
  add(String name, Component component), 
  add(Component component, Object constraints, int index) 
  setLayout() and getLayout() 
  getComponent() 
  getInsets() 
  remove and removeAll() 
  validate() 
  这些方法主要与我们后面讲的步骤,例如布局管理、添加组件有关。 
  10.2.2 布局管理 
  选择了容器之后,可以通过容器的setLayout()和getLayout()方法来确定布局(Layout),也就是限制容器中各个组件的位置和大小等。 
  Java提供了多种布局,如顺序布局(Flow Layout)、边界布局(Border Layout)和网格布局(Grid Layout)等。 
  1.顺序布局 
  顺序布局(Flow Layout)是最基本的一种布局,面板的默认布局就是顺序布局。顺序布局指的是把图形元件一个接一个地放在面板上。下面是一个顺序布局的例子。 
  package sample; 
  import java.awt.*; 
  import java.awt.event.WindowAdapter; 
  import java.awt.event.WindowEvent; 
  public class MyFlowLayout { 
  private Frame f; 
  private Button button1, button2, button3; 
   
  public static void main (String args[]) { 
  MyFlowLayout mflow = new MyFlowLayout (); 
  mflow.go(); 
  } 
   
  public void go() { 
  f = new Frame ("FlowLayout演示"); 
  f.addWindowListener(new WindowAdapter(){ 
  public void windowClosing(WindowEvent evt) { 
  f.setVisible(false); 
  f.dispose(); 
  System.exit(0); 
  } 
  }); 
  //f.setLayout(new FlowLayout()); 
  f.setLayout(new FlowLayout(FlowLayout.LEADING, 20, 20)); 
  button1 = new Button("确定"); 
  button2 = new Button("打开"); 
  button3 = new Button("关闭"); 
  f.add(button1); 
  f.add(button2); 
  f.add(button3); 
  f.setSize (200,200); 
  f.pack(); 
  f.setVisible(true); 
  } 
  } 
  程序运行结果见图10-3。 
   
   
  图10-3 顺序布局(Flow Layout) 
  2.边界布局 
  边界布局(Border Layout)包括5个区:北区、南区、东区、西区和中区。这5个区在面板上的分布规律是“上北下南,左西右东”。下面是一个边界布局的例子。 
  package sample; 
  import java.awt.*; 
  import java.awt.event.WindowAdapter; 
  import java.awt.event.WindowEvent; 
  public class MyBorderLayout { 
  Frame f; 
  Button east, south, west, north, center; 
   
  public static void main(String args[]) { 
  MyBorderLayout mb = new MyBorderLayout(); 
  mb.go(); 
  } 
   
  public void go() { 
  f = new Frame("BorderLayout 演示"); 
  f.addWindowListener(new WindowAdapter(){ 
  public void windowClosing(WindowEvent evt) { 
  f.setVisible(false); 
  f.dispose(); 
  System.exit(0); 
  } 
  }); 
   
  f.setBounds(0,0, 300, 300); 
  f.setLayout(new BorderLayout()); 
   
  north = new Button("北"); 
  south = new Button("南"); 
  east = new Button("东"); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值