java基础五(AWT和Swing)


目录

1.概念

2.布局管理器

2.1FlowLayout(流式布局)

2.2BorderLayout(边界布局)

2.3GridLayout(网格布局)

2.4CardLaout(卡片布局)

3.AWT

3.1事件处理

3.2AWT的组件

4.Swing

4.1容器面板和组件

4.2布局管理

4.3事件处理

 

 

一、概念

  1、AWT (抽象窗口工具包)(Abstract Window Toolkit):提供的建立图形用户界面GUI(Graphics User Interface)的开发包。

  2、java.awt包:提供GUI设计所使用的类和接口。主要包括 组件(Component)、容器(Container)、布局管理器(LayoutManager)。

  3、组件不能独立地显示出来。必须要放在一定的容器中才可以显示出来。

  4、布局管理器(LayoutManager):用来管理组件放置在容器中的位置和大小的。

  5、面板(Panel):是一种透明的容器,没有标题,也没有边框,就像一块透明玻璃。

 

 

二、布局管理器(LayoutManager)

   使用布局管理器的注意点:

  (1)在不作任何设置的前提下,用户无法设置组件的属性,都会被布局管理器覆盖。使用的属性无效。

  (2)如果用户想自己设置组件的位置和大小,需要将布局管理器设置为setLayout(null),才可以设置各个组件的属性。

 

  1、FlowLayout(流式布局)

  是Panel和Applet的默认布局管理器。

  规则:从上到下、从左到右进行放置,一行放满,然后在下一行继续放置。

  new FlowLayout( FlowLayout.LEFT, 20 ,40 );  单位是像数

  参数:(1)对齐方式。(2)组件间横向距离。(3)组件间纵向距离。

  

public class test {

    public static void main(String[] args) {
        
        //定义一个窗体
        Frame frame = new Frame();
        
        //设置窗体的出现的坐标和大小
        frame.setBounds(300, 20, 300, 400);
        
        //定义需要使用的流式布局
        frame.setLayout(new FlowLayout());
        
        //一行排满后,就会在排在下一行
        for(int i = 0; i < 10; i++) {
            frame.add(new Button("测试"+i));
        }
        
        //允许显示
        frame.setVisible(true);
    }

}
View Code

返回顶部

 

  2、BorderLayout(边界布局)

  是Window、Frame、Dialog的默认布局管理器。该管理器把容器分为5个区域:North、South、East、West、Center、每一个区域只能放置一个组件。默认是Center位置。

  规则:在顶层容器大小改变时,组件的位置不会改变。在使用add()组件的时候,必须要指定组件的位置。

  

public class test {

    public static void main(String[] args) {
        
        //定义一个窗体
        Frame frame = new Frame();
        
        //设置窗体的出现的坐标和大小
        frame.setBounds(300, 20, 300, 400);
        
        //定义需要使用的边界布局
        frame.setLayout(new BorderLayout());
        
        //使用add(*)需要指定组件的位置
        frame.add("North",new Button("North"));
        frame.add("South",new Button("South"));
        
        //允许显示
        frame.setVisible(true);
    }

}
View Code

返回顶部

 

  3、GridLayout(网格布局)

  是组件呈网格状布局,平均占据容器的空间。

  规则:当容器大小改变时,每一个组件还是平均占据容器的空间。也是按照从上到下、从左到右进行放置

  new GridLayout( 4,2 );  参数:第一个行数。第二个列数

  

public class test {

    public static void main(String[] args) {
        
        //定义一个窗体
        Frame frame = new Frame();
        
        //设置窗体的出现的坐标和大小
        frame.setBounds(300, 20, 300, 400);
        
        //定义需要使用的边界布局
        frame.setLayout(new GridLayout(4,2));
        
        //添加8个组件
        for(int i= 1; i <= 8; i++) {
            frame.add(new Button(""+i));
        }
        
        //允许显示
        frame.setVisible(true);
    }

}
View Code

返回顶部

 

  4、CardLayout(卡片布局)

  处理两个以上的成员共享同一个显示的空间。把容器分成很多层。每一层显示的空间占整个容器大小,但是每一层只能放一个组件。

  常用方法:

  first(Container parent) 显示第一张卡片。 last(Container parent) 显示最后一张卡片。

  next(Container parent) 显示下一张卡片。 previous(Container parent) 显示前一张卡片。

  show(Container parent,String name) 显示指定卡片

public class test implements ActionListener{
    
    private Panel panel,panel2,panel3;//设置面板
    private Button button,button2,button3;//设置按钮
    private Frame frame;//设置窗体
    private CardLayout cl = new CardLayout();
    
    public test() {//构造器注入
        
        button = new Button("第一个");
        button2 = new Button("第二个");
        button3 = new Button("第三个");
        panel = new Panel();
        panel2 = new Panel();
        panel3 = new Panel();
        frame = new Frame();
        
        frame.setBounds(300, 20, 300, 100);
        frame.setLayout(cl);
        frame.add(panel,"第一层");
        frame.add(panel2,"第二层");
        frame.add(panel3,"第三层");
        
        panel.add(button);
        panel2.add(button2);
        panel3.add(button3);
        
        button.addActionListener(this);
        button2.addActionListener(this);
        button3.addActionListener(this);
        
        frame.setVisible(true);
        
    }

    public static void main(String[] args) {
        
        test tt = new test();
        
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        
        cl.next(frame);
    }

}
View Code

返回顶部

 

 三、AWT

   事件处理:

  1、主要涉及三个对象:

  (1)Event:事件类,以类的形式出现,如:KeyEvent。

  (2)Event Source:事件源,发生事件的场所,如:Button。

  (3)Event Handler:事件处理者,接收事件对象并对其进行处理。

  在使用的时候需要先在容器中注册事件监听器。使用addXXListener()来注册监听器。

  与AWT有关的所有事件类都由java.awt.AWTEvent类派生,也是EventObject类的子类。

 

  2、主要分为:

  (1)低级事件:指基于组件和容器的事件。

  ComponentEvent(组件事件,组件尺寸的变化、移动)

  ContainerEvent(容器事件,组件增加、移动)

  WindowEvent(窗体事件,关闭窗口,窗口闭合,图标化)

  FocusEvent(焦点事件,焦点的获取、丢失)

  KeyEvent(键盘事件,按键的按下、释放)

  MouseEvent(鼠标事件,鼠标的点击、移动)

 

  (2)高级事件:基于语义上的事件

  ActionEvent(动作事件,按钮按下)

  AdjustmentEvent(调节事件,滚动条上移动滑块以调节数值)

  ItemEvent(项目事件,选择项目)

  TextEvent(文本事件,文本对象改变)

 

    AWT事件的层次图

  

 

  3、AWT事件类和接口(10个类,11个接口)

返回顶部

 

  4、事件适配器(Adapter)

  提供一种简单的实现监听器的手段,可以缩短程序代码。由于java的单继承机制。很多监听器都已经有父类时,就无法采用事件适配器了。

  对应的适配器有:CompinentAdapter(组件适配器)、ContainerAdapter(容器适配器)、FocusAdapter(焦点适配器)、KeyAdapter(键盘适配器)、MouseAdapter(鼠标适配器)、MouseMotionAdapter(鼠标运动适配器)、WindowAdapter(窗口适配器)

 

  内部类(inner Class):是被定义另一个类中的类。内部类不但可以访问外部成员方法和变量,并且容易实现功能。

public class test { //这是一个外部类
    
    class test2{//这是一个内部类
        
    }
}

 

  匿名类(Anonymous Class):当一个内部类只需要在创建时只调用一次,而且新类需要继承于一个已有的父类或实现一个接口,才能考虑用到匿名类。匿名类不存在构造方法,它需要显式调用一个无参的父类的构造方法,并且重写父类的方法。

public class test { //这是一个外部类
    
    public static void main(String[] args) {
        
        Frame frame = new Frame();
        
        //new KeyAdapter()就是匿名类
        frame.addKeyListener(new KeyAdapter() {
            
        });
    }
}

返回顶部

 

  AWT的组件

  Button(按钮)、Checkbox(复选框)、CheckboxGroup(复选框组)、Choice(下拉式菜单)、Canvas(画布)、TextField(单行文本输入区)、TextArea(文本输入区)、List(列表)、Frame(框架)、Dialog(对话框)、Filedialog(文件对话框)、Menu(菜单)、MenuBar(菜单容器)、MenuItem(菜单项)、

  主要查看AIP文档进行使用。

 

四、Swing

  由纯java实现的轻量级组件,没有本地代码,不依赖操作系统的支持,这也是与AWT最大的区别。并且在显示风格方面也是可以在不同平台上显示不同的窗体风格。采用一种MVC的范式。

 

  Swing的特性:

  • 组件的多样化:Swing的组件以"J"开头,除了类似有AWT的一些组件外,还有增加了一些高层组件集合。如JTree
  • MVC体系结构:Swing使用的MVC的体系结构,模型-视图-控件。
  • 可存取性支持:Swing的组件都实现了Accessible接口,提供对可存取性的支持。
  • 支持通过键盘来代替鼠标的操作:
  • 允许设置边框:允许对组件设置一个或多个边框,并且可以设计自己的风格边框。
  • 支持使用图标:支持对组件添加图片。

 

  使用规则:Swing组件不能直接添加到顶层容器中,必定添加到一个与Swing顶层容器相关联的内容面板上。内容面板就是顶层容器包含的一个普通的容器。

 

  1、容器面板和组件

  (1)根面板:由一个玻璃面板(ClassPane)、内容面板(ContentPane)、可选择的菜单条(JMenuBar)组成。内容面板和可选择菜单条放在同一个分层。玻璃面板默认是不可见的。

  (2)分层面板:分为JLayeredPane、JDesktopPane。后者是前者的子类。专门用于容纳内部框架(JInternalFrame)的。

  (3)面板(JPanel):是轻量级容器组件,默认布局管理器是FlowLayout。

  (4)分隔板(JSplitPane):分隔两个组件,可以按照水平、垂直的方向分隔。

  (5)选择板(JTabbedPane):一组可以选择的带图标的选项,每一个选项下面都可以显示一个组件。

  (6)工具栏(JToolBar):用于显示常用工具控件的容器。

  (7)内部框架(JInternalFrame):就像一个窗口在另一个窗口的内部。

 

  其他组件:JScrollPane(滚动窗口)、JButton(按钮)、JCheckBox(复选框)、JRadioButton(单选框)、JComboBox(选择框)、JFileChooser(文件选择器)、JLabel(标签)、JList(列表)、JProgressBar(进程条)、JSlider(滑动杆)、JMenu(菜单)、JTable(表格)、JTree(树)、JOptionPane(对话框)

  主要查看AIP文档进行使用。

 

  2、布局管理

  处理上面的五种布局管理,Swing中还有一种BoxLayout。按照自上而下或者从左到右顺序布局依次加入组件。使用的时候必须指明两个参数:被布局的容器、BoxLayout的主轴。

 

  3、事件处理

返回顶部

 

AWT和Swing最主要的还是要查看API文档进行使用。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM