真正认识 JFrame 和 getContentPane() 方法

关于setContentPane()和getContentPane()的应用

       我们可以在 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的内容面板

  • 49
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
武汉理工java实验2,大家课学习参考package sun; import java.awt.*; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.StringTokenizer; //导入 public class Test1 extends JFrame {//继承JFrame private final JPanel contentPane;//私有类,其他类不能享用 private final JTextPane numberField;//容器类 private final JTextField sumyun;//创建对象 private final JTextField aveField; public static void main(final String[] args) {//主函数 EventQueue.invokeLater(new Runnable() {//使事件派发线程上的可运行对象排队。当可运行对象排在事件派发队列的队首时,就调用其run方法 public void run() { try { final Test1 frame = new Test1();//捕获异常 frame.setVisible(true); } catch (final Exception e) { e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因 } } }); } public Test1() { super("第二次实验:和与平均值"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//使用 System exit 方法退出应用程序。仅在应用程序中使用。 setBounds(100, 100, 400, 300);//setBounds(x,y,width,height):x:组件在容器X轴上的起点;y:组件在容器Y轴上的起点;width:组件的长度;height:组件的高度。 contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(10, 10, 10, 10)); setContentPane(contentPane);//给窗体加个panel作为内容面板 contentPane.setLayout(null); numberField = new JTextPane(); numberField.addKeyListener(new KeyAdapter() {//键盘事件监听者 public void keyTyped(final KeyEvent e) { double sum = 0,avg = 0; switch(e.getKeyChar()) { case KeyEvent.VK_SPACE: //分隔符为空格 case KeyEvent.VK_COMMA: //分隔符为英文逗号 case KeyEvent.VK_ENTER: //分隔符为回车 final String str=numberField.getText(); final StringTokenizer analyze = new StringTokenizer(str," ,\n");//StringTokenizer 用来分割字符串,用,/n分割 final int allnum=analyze.countTokens(); for(int i =0;i<allnum;i++) { final String temp = analyze.nextToken(); //nextToken() 用于返回下一个匹配的字段 sum = sum+Double.parseDouble(temp); } if(allnum>0) { avg = sum/allnum; }else { avg = 0; } sumyun.setText(Double.toString(sum)); aveField.setText(Double.toString(avg)); } } }); /*numberField.setBounds(15, 15, 350, 100); contentPane.add(numberField); final JLabel label = new JLabel("和 值"); label.setBounds(60, 140, 70, 20); contentPane.add(label); final JLabel label_1 = new JLabel("平均值"); label_1.setBounds(60, 180, 70, 20); contentPane.add(label_1);*/ sumyun = new JTextField(); sumyun.setBounds(130, 140, 230, 25); contentPane.add(sumyun); sumyun.setColumns(10); aveField = new JTextField(); aveField.setBounds(130, 180, 230, 25); contentPane.add(aveField); aveField.setColumns(10); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值