AWT和布局管理器

  • AWT(Abstract Window Toolkit)抽象窗口开发包

  • component:可以显示出来的与用户进行交互的图形元素
  • container:容纳其他component元素的容器;continer可以容纳component;所以container可以容纳container。

  continer对象可以使用add方法添加其他的component对象。

  一般的component不能独立显示出来,必须放在某一continer对象中才可以显示出来

  两种常用的container:

  1、Windows:自由停泊的顶级窗口

  • Dialog:模态和非模态对话框;
  • Frame:可做独立窗口显示出来

  Frame的构造方法:

  Frame()

  Frame(String s)//创建标题栏为字符串的窗口

  setBounds(int x,int y,int width,int height) //设置窗体位置和大小,x,y为左上角坐标(单位为像素);width和height是宽度和高度

  setSize(int width,int height)//设置窗体的大小

   setLocation(int x,int y)//设置窗体的位置

  setBackground(Color c)//设置背景颜色,设置为color对象   cyan青色;magenta洋红

  setVisible(boolean b)//设置是否可见

  setTitle(String name)   String getTitle()

  setResizeble(boolean b)  //设置是否可以调节大小

  在未定义按钮的情况下,Ctrl+c

  setLayout()//设置布局  

import java.awt.Color;
import java.awt.Frame;

public class TestMultiFrame {
    public static void main(String args[]) {
        MyFrame f1 = 
            new MyFrame(100,100,200,200,Color.BLUE);
        MyFrame f2 = 
            new MyFrame(300,100,200,200,Color.YELLOW);
        MyFrame f3 = 
            new MyFrame(100,300,200,200,Color.GREEN);
        MyFrame f4 = 
            new MyFrame(300,300,200,200,Color.MAGENTA);
    }
}

class MyFrame extends Frame{
    static int id = 0;
    MyFrame(int x,int y,int w,int h,Color color){
        super("MyFrame " + (++id));
        setBackground(color);
        setLayout(null);
        setBounds(x,y,w,h);
        setVisible(true);
    }
}

 运行结果:

  

 

  2、Panel:不能自由停泊,不是顶级窗口,必须添加到continer里面才能显示出来。

  Panel可以容纳其他的component对象(例如:Button),但是不能独立显示。

  Panel可以有自己的布局管理器

  Panel是一般容器,可以自身嵌套(比如在panel1里嵌入panel2);但Frame已经是顶层容器了,自身不能嵌套。

  Panel的构造方法:

  Panel()//使用默认FlowLayout类布局管理器初始化

  Panel(LayoutManager layout)//使用指定的布局管理器初始化

  Panel拥有从父类继承来的 

  setBounds(int x,int y,int width,int height)

  setSize(int width,int height)

    setLocation(int x,int y)

  setBackground(Color c)

  setLayout(LayoutManager mgr)

import java.awt.*;
public class TestMultiPanel {
    public static void main(String args[]) {
        new MyFrame2("MyFrameWithPanel",300,300,400,300);
    }
}
class MyFrame2 extends Frame{
    private Panel p1,p2,p3,p4;
    MyFrame2(String s,int x,int y,int w,int h){
        super(s);
        setLayout(null);
        p1 = new Panel(null); p2 = new Panel(null);
        p3 = new Panel(null); p4 = new Panel(null);
        p1.setBounds(0,0,w/2,h/2);
        p2.setBounds(0,h/2,w/2,h/2);
        p3.setBounds(w/2,0,w/2,h/2);
        p4.setBounds(w/2,h/2,w/2,h/2);
        p1.setBackground(Color.BLUE);
        p2.setBackground(Color.GREEN);
        p3.setBackground(Color.YELLOW);
        p4.setBackground(Color.MAGENTA);
        add(p1);add(p2);add(p3);add(p4);
        setBounds(x,y,w,h);
        setVisible(true);
    }
}

运行结果:

 ?????是BorderLayout布局管理器?

 

  为什么Frame可以独立显示而Panel不可以?

  在Window类里定义了pack()和show()两个显示窗口的方法,被Frame继承了过来。这可能也是panel无法单独使用的一个原因吧,Panel和它的直接超类Container里,都没有定义类似pack()和show()的显示容器的方法。

  • 布局管理器

  管理component在container中的布局,不必直接设置component的大小和位置

  每个continer都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其布局管理器,调用continer的setLayout方法改变其布局管理器对象

   awt提供了5种布局管理器:(实现LayoutManager接口)

  1、FlowLayout

    panel类的默认布局管理器

    逐行定位,行内从左到右,排满换行,不改变组件大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。

    FlowLayout的默认对齐方式为居中

    setLayout(new FlowLayout())//FlowLayout实现了LayoutManager的接口//父类引用指向子类对象;

    FlowLayout的构造函数:

          new FlowLayout(FlowLayout.RIGHT,20,40);//右对齐,组件之间水平距离20像素,垂直距离40像素;

          new FlowLayout(FlowLayout.LEFT);  / /左对齐,水平和垂直距离为缺省值5

          new FlowLayout();//居中对齐,水平和垂直距离为缺省值5(居中对齐为FlowLayout.CENTER)

import java.awt.*;
public class TestFlowLayout2 {
    public static void main(String args[]) {
        Frame f = new Frame("Java Frame");
        FlowLayout l = 
            new FlowLayout(FlowLayout.CENTER, 20, 40);
        f.setLayout(l); 
        f.setLocation(300,400);
        f.setSize(300,200);
        f.setBackground(new Color(204,204,255));
        for(int i = 1; i<=7; i++){
            f.add(new Button("BUTTON"));
        }
        f.setVisible(true);
    }
}

运行结果:

                

 

 2、BorderLayout

    Frame类的默认管理器

    BorderLayout将整个容器的布局分为:东(EAST)西(WEAST)南(SOUTH)北(NORTH)中(CENTER)五个布局,只能将组件放到指定区域。//为int型

    如不指定组件位置,则将其放入CENTER;

    每个区域只能加入一个组件,如加入多个,则先加入的会被覆盖。

           

    BorderLayout布局尺寸缩放原则:

          南北两个区域水平方向缩放

          东西两个区域垂直方向缩放

          中间可在两个方向上缩放

import java.awt.*;
public class TestBorderLayout {
    public static void main(String args[]) {
        Frame f;
        f = new Frame("Border Layout");
        Button bn = new Button("BN");
        Button bs = new Button("BS");
        Button bw = new Button("BW");
        Button be = new Button("BE");
        Button bc = new Button("BC");
        
        f.add(bn, "North");
        f.add(bs, "South");
        f.add(bw, "West");
        f.add(be, "East");
        f.add(bc, "Center");
        
        
        // 也可使用下述语句
        /*
        f.add(bn, BorderLayout.NORTH);
        f.add(bs, BorderLayout.SOUTH);
        f.add(bw, BorderLayout.WEST);
        f.add(be, BorderLayout.EAST);
        f.add(bc, BorderLayout.CENTER);
        */
        
        f.setSize(200,200);
        f.setVisible(true);
    }
}

运行结果:

      

 

  3、GridLayout

    GridLayout将空间划分为小格,每个单元格大小相等。组件被填到每个单元格中,从左到右填满换行,从上到下。

    GridLayout的构造方法:

      例:GridLayout(3,4) //指定行数和列数

import java.awt.*;
public class TestGridLayout {
    public static void main(String args[]) {
        Frame f = new Frame("GridLayout Example");
        Button b1 = new Button("b1");
        Button b2 = new Button("b2");
        Button b3 = new Button("b3");
        Button b4 = new Button("b4");
        Button b5 = new Button("b5");
        Button b6 = new Button("b6");
        f.setLayout (new GridLayout(3,2));
        f.add(b1);        
        f.add(b2);
        f.add(b3);        
        f.add(b4);
        f.add(b5);        
        f.add(b6);
        f.pack();       //包着button,button不改变大小,pack使窗口适应button大小   
        f.setVisible(true);
    }
}

运行结果:

  

 

  4、CardLayout

    5、GridBagLayout

综合:

import java.awt.*;
public class TenButtons {
  public static void main(String args[]) {
      Frame f=new Frame("My Frame");
      f.setLayout(new GridLayout(2,1));
      Panel p1=new Panel();
      Panel p2=new Panel();
      Panel p21=new Panel();
      Panel p22=new Panel();
      p1.setLayout(new BorderLayout());
      p2.setLayout(new BorderLayout());
      p21.setLayout(new GridLayout(2,1));
      p22.setLayout(new GridLayout(2,2));
      p1.add(new Button("Button"), BorderLayout.EAST);
      p1.add(new Button("Button"), BorderLayout.WEST);
      p21.add(new Button("Button"));
      p21.add(new Button("Button"));
      p1.add(p21, BorderLayout.CENTER);
      p2.add(new Button("Button"), BorderLayout.EAST);
      p2.add(new Button("Button"), BorderLayout.WEST);
      for(int i=0;i<4;i++){
          p22.add(new Button("Button"));
      }
      p2.add(p22, BorderLayout.CENTER);
      f.add(p1);
      f.add(p2);
      f.setVisible(true);
      f.pack();
  }
}

运行结果:

     

 总结:

使用布局管理器时,布局管理器负责各个组件的位置和大小,用户不能设置位置和大小属性;

如果用户想自己设置,则取消容器的布局管理器,方法为:setLayout(null);

转载于:https://www.cnblogs.com/Lune-Qiu/p/7354730.html

81、Java AWT 控件、布局管理器菜单的使用 本文详细介绍了Java AWT布局管理器(特别是GridBagLayout)、菜单(包括菜单栏、菜单项可勾选菜单项)、对话框(包括模态非模态对话框)以及文件对话框的使用方法。同时,还讲解了重写paint()方法的注意事项以及相关事件处理机制。通过示例代码流程图,帮助开发者构建功能丰富的图形用户界面。最后,文章总结了实际应用场景及开发中的注意事项,并展望了未来可能的探索方向。 阅读详情

相关推荐

AWT组件提供的6种布局管理器

BorderLayout——边界布局管理器:FlowLayout——流式布局管理器:GridLayout——网格布局:CardLayout——卡片式布局:...

AWT布局管理器

一FlowLayout(流式布局) 1点睛 FlowLayout,是Panel的默认布局管理方式。在流式布局中,组件从左到右,而后从上到下的顺序,如流水一样,碰到障碍就折回,重头排序,简单来说,就是一行放不下,则折到下一行。 2代码 import java.awt.Frame; import java.awt.Button; import java.awt.FlowLayout; ...

实践求真知 1156

Debian下Rust环境极速安装指南:国内镜像+避坑配置(附清华/中科大源对比)

本文详细介绍了在Debian系统上快速安装配置Rust开发环境的完整指南。针对国内网络环境,重点对比评测了清华大学、中国科学技术大学等主流镜像源,提供了详细的安装配置步骤、Cargo优化技巧以及常见问题排查方案,帮助开发者显著提升依赖下载编译效率。

s8t9u0v1w的博客 1139

[疯狂Java笔记]AWT布局管理器、绝对布局、FlowLayout流式布局

1. 对容器中的组件进行合理的布局——布局管理器:     1) 当然用户可以自己手动测量定位来设置组件在容器中的绝对位置绝对大小,但这很麻烦,并且牺牲了平台无关性;     2) 单通常在数学上,只要组件在容器中按照一定规律排列的话就必然有一个最佳位置最佳大小,这个最佳可以理解为既没有冗余的空间也没有任何关键内容被遮挡;     3) 上述中可以看到布局的两个要素就是:

Lirx_Tech的专栏 4256

GUI界面、AWT组件提供的6种布局管理器

1.1创建一个窗口 public class Frame1 { public static void main(String[] args) { //创建Frame对象 Frame f = new Frame(); //设置Frame大小 f.setSize(300, 200); //设置位置 f.setLocation(20, 30); //设置背景 f.se

回忆 2003

java awt布局_java.awt布局管理器

Javaawt包中定义了很多GUI组件,如按钮、标签、文本框等,这些组件一般放在Frame、Panel容器中进行管理。容器中的组件的大小、位置、排列方式等属性统称为容器的布局。在java中提供了布局管理器对容器中的布局进行管理。常用的布局管理器及其显示特性如下表:所属类包布局管理器名称显示效果Java.awtFlowLayout组件按照加入的先后顺序逐行摆放,行内从左到右,一行排满后换行,可以设...

weixin_27102543的博客 426

六种布局管理器

Awt包下提供了五种布局管理器: FlowLayout:流式布局,一行一行的,每一行都是从左向右依次排列,遇到边界就换行。 import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* 流式布局FlowLayout 1. CENTER (常量值1) 该值表示每行的组件应该居中。 2. LEADING (常量值3) 该值表示组件的每一行

weixin_43808717的博客 2367

java swt 布局管理器_AWT,SWTSwing的布局管理器与Look And Feel机制

布局管理器并不是三者中的所有部分都是不同的。布局管理器是一个例外。开发GUI应用程序,当容器改变大小的时候,组件需要重定位或改变大小。在传统的编程语言中,这依靠监听大小改变的事件来实现。相应的片段散落在源代码的各个角落降低了程序的可读性。Java引入了将布局代码封装的思路,称之为布局管理器。当布局管理器对象被设置到一个容器中,它自动处理大小改变的事件。当大小改变时,管理器的布局方法被调用以重定位子...

weixin_42099755的博客 294

Day03(GUI编程起步 AWT( 组件容器 三种布局管理器))

GUI编程介绍 常用组件用途: 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 外挂 破解工具 1.简介 GUI核心技术:Swing AWT 1.界面不美观 2.需要jre环境 1.可以写出心里想要的小工具 2.工作时可能要维护Swing界面 3.了解MVC架构,了解监听器 2.AWT 2.1AWT介绍 1.包含很多类接口! GUI:图形 用户 界面编程 2.元素:窗口 按钮 文本框 3.java.awt包 2.2组件容器 2.2.1 第一个Frame 1.一个窗口

wjr0258的博客 236

[自用篇Java]JavaAWT编程基础—布局管理器

AWT编程基础关于AWTSwing的一些介绍AWT容器容器AWT容器的继承关系FramePanel 关于AWTSwing的一些介绍 Java使用AWTSwing类完成图形用户界面编程。 AWT的全称是抽象窗口工具集(Abstract Window Toolkit),是最早提供的GUI库,该GUI库提供了一些基本功能,但功能有限,所以又提供了Swing库。 AWT是窗口框架,从不同平...

qq_45075127的博客 842

AWT 布局管理器Java 图形界面编程的核心

布局管理器Java 中的一种机制,用于自动管理容器中组件的位置尺寸。在没有布局管理器的情况下,开发人员需要手动设置组件的位置、大小其他属性,这样的方式既繁琐又容易出错。而布局管理器可以根据不同的策略自动计算调整组件的大小位置,使得界面布局更加灵活响应式。

2302_79376097的博客 5554

Java基础】之AWT,一篇文章搞懂awt(包含绘图)

入门awt不错的文章,带你快速上手awt

屠一乐的博客 1万+

java awt 教程_JAVA教程第五讲AWT图形用户界面设计

5.1 用AWT生成图形化用户界面抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的appletapplications中。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;图形图像工具,包括形状、颜色字体类;布局管理器...

weixin_39888268的博客 201

javaGUI学习20:AWT-布局管理器

容器把对构件的布置,整形定位,授权给一个布局管理器。一个容器的布局管理器是专用工具,用于定位整形与它相关的容器中的构件。 每个容器保存一-个对一个布局管理器的引用,这个布局管理器对容器中的构件进行定位整形。 容器只是可以含有其他构件的构件。AWT提供了一些扩展Container的类。 每个容器都访问一个布局管理器,该布局管理器有责任对容器中的构件进行定位整形。 Container扩展的类框图: 1、布局管理器 LayoutManager是一个接口,它定义了下面一些方法: void addLay.

八十岁老将的博客 377

GUI 02:布局管理器相关知识,AWT 的 3 种布局管理器应用,以及嵌套布局的使用

本文讲述了 GUI 编程种布局管理器的相关知识,以及 AWT 的 3 种布局管理器——流式布局、边界布局(东西南北中)、网格布局。搭配面板使用,可以实现布局嵌套功能。

积累,沉淀,温故而知新 1459

第11章 AWT编程

第11章 AWT编程 11.1 GUI(图形用户界面)AWT 11.2 AWT容器 11.3布局管理器 11.3.1 FlowLayout布局管理器 11.3.2 BorderLayout布局管理器 11.3.3 Dr...

weixin_33994444的博客 99
上一篇: 选择器
下一篇: 事件模型
diechi0288
博客等级 码龄10年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值