> 文档中心 > Container

Container

目录

AWT编程

AWT简介

AWT继承体系

Container容器

Container继承体系

解决字符编码


      

AWT编程

      AWT不是已经过时的东西吗?为啥还得学嘞~,当然是计算机JAVA二级嘛, 小可爱们看看下面的二级考试大纲和历年的卷子就知道了,太痛苦了吧!那么接下来Nick会整理几期关于七、八部分的详细学习笔记,欢迎大家点赞关注哦!

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

      

AWT简介

      当JDK1.0发布时,Sun提供了一套基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行,这套基本类库被称为"抽象窗口工具集CAbstract Window Toolkit )",它为Java应用程序提供了基本的图形组件AWT是窗口框架,它从不同平台的窗口系统中抽取出共同组件,当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台。简而言之,当使用AWT编写图形界面应用时,程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM调用操作系统本地的图形界面来创建和平台一致的对等体。

              

      使用AWT创建的图形界面应用和所在的运行平台有相同的界面风格,比如在Windows操作系统上,它就表现出Windows风格;在UNIX操作系统上,它就表现出UNIX风格。Sun希望采用这种方式来实现" Write Once,Run Anywhere "的目标。

1c5ff520b766d591552339fc676a7c56.png

         

AWT继承体系

      所有和AWT编程相关的类都放在java.awt包以及它的子包中,AWT编程中有两个基类

       Component和 Menucomponent

  • Component:代表一个能以图形化方式显示出来,并可与用户交互的对象,例如Button代表一个按钮,TextField 代表一个文本框等;

  • MenuComponent :则代表图形界面的菜单组件,包括MenuBar (菜单条)、Menultem (菜单项)等子类。

          

重点:了解大纲,方便接下来的模块化学习~watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

  • 其中Container是一种特殊的Component,它代表一种容器,可以盛装普通的Component。
  • AWT中还有一个非常重要的接口叫LayoutManager,如果一个容器中有多个组件,那么容器就需要使用LayoutManager来管理这些组件的布局方式。

4e90fe149f84f81cacdd5debea57bdc0.png

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_17,color_FFFFFF,t_70,g_se,x_16

        

Container容器

Container继承体系

重点:我们先来讲讲大纲中的 Container容器

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

         

  • Window是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;

  • Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局;

  • ScrolIane是一个带滚动条的容器.它也不能独立存在.默认使用BorderLavout管理其内部组件布

          

常见的API

Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

         

 Container作为容器根类,提供了如下方法来访问容器中的组件

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

          

 接下来到了最激动人心得时候了,大家跟着Nick实操搞起!

31f1cc8097dfa8e25b7f68e28c7b0c56.png

Window

效果:

够简单吧~这是窗体中的HelloWorld

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_16,color_FFFFFF,t_70,g_se,x_16

代码:

public class WindowDemo {    public static void main(String[] args) { //创建一个窗口对象 Frame frame = new Frame("这里测试window窗口"); //指定窗口位置、大小 frame.setLocation(100,100); frame.setSize(500,300); //设置窗口可见 frame.setVisible(true);    }}

        

Panel

效果:

稍微上升点难度哈~

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

代码:

public class PanelDemo {    public static void main(String[] args) { //先要创建一个window对象,因为panel以及其他的容器都不能独立存在,必须依附于windows存在 Frame frame = new Frame("这里是延时Panel"); //创建一个Panel对象 Panel panel = new Panel();//window那一片白的都是panel //创建一个文本框和一个按钮,并且把他们放在容器中 panel.add(new TextField("这里是一个测试文本")); panel.add(new Button("这是一个测试按钮")); //把panel放入到window中 frame.add(panel); //设置window位置及大小 //方法1//frame.setLocation(100,100);//frame.setSize(500,300);//方法2 frame.setBounds(100,100,500,300); //设置Window可见 frame.setVisible(true);    }}

               

解决字符编码

重点:看到这里可能有些小伙伴坐不住了,为啥我的按钮是乱码嘞?

解决字符编码问题:window默认为GBK,但是idea为utf-8,因此要给虚拟机设置

-Dfile.encoding=gbk 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

解决方法:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_18,color_FFFFFF,t_70,g_se,x_16

找到你刚才创建的文件,在图中只是地方输入 -Dfile.encoding=gbk

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

 在运行试试~是不是解决问题啦?

        

ScrollPane

效果:

一起来测试下SoroolPane趴

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

代码:

public class ScrollPaneDemo {    public static void main(String[] args) { Frame frame = new Frame("这里演示ScrollPane"); //创建一个ScrollPane对象 ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); //往ScrollPane中添加内容 scrollPane.add(new TextField("这是测试文本")); scrollPane.add(new Button("这是测试按钮")); //把ScrollPane添加到frame中 frame.add(scrollPane); frame.setBounds(100,100,500,300); frame.setVisible(true);    }}

         

程序明明向ScrollPane容器中添加了一个文本框和一个按钮,但只能看到一个按钮,却看不到文本框,这是为什么呢?

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATmlja19CZWFycw==,size_20,color_FFFFFF,t_70,g_se,x_16

      这是因为Scrollane使用BorderLayout布局管理器的缘故,而BorderLayout导致了该容器中只有一个组件被显示出来。

        

      好啦!今天Nick的笔记分享就到这里了,下期我会分享关于(LayoutManage)有关笔记。

喜欢我的文章欢迎点赞留言哦!你的支持是我写文章最大的动力!

7650a4ae3222487d624a3c8a238aadf4.gif

美剧天堂种子