AWT常用组件

一、基本组件

AWT提供了如下基本组件:

  • Button:按钮,可接受单击操作。
  • Canvas:用于绘图的画布。
  • Checkbox:复选框组件(也可变成单选框组件)。
  • CheckboxGroup:用于将多个 Checkbox 组件合成一组,一组 Checkbox 组件将只有一个可以被选中,即全部变成单选框组件。
  • Choice:下拉式选择框组件。
  • Frame:窗口,在 GUI 程序里通过该类创建窗口。
  • Label:标签类,用于放置提示性文本。
  • List:列表框组件,可以添加多条项目。
  • Panel:不能单独存在的基本容器类,必须放到其他容器中。
  • Scrollbar:滑动条组件,如果需要用户输入位于某个范围的值,就可以使用滑动条组件,比如调色板中设置 RGB 的三个值所用的滑动条。当创建一个滑动条时,必须指定它的方向、初始值、滑块的大小、最小值和最大值。
  • ScrollPane:带水平及垂直滚动条的容器组件。
  • TextArea:多行文本域。
  • TextField:单行文本框。

下面的例子程序示范了它们的基本用法。

public class ComponentTest {

    Frame f = new Frame("测试");
    //定义一个按钮
    Button ok = new Button("确认");
    CheckboxGroup cbg = new CheckboxGroup();
    //定义一个单选框(处于cbg一组),初始处于被选中状态
    Checkbox male = new Checkbox("男" , cbg , true);
    //定义一个单选框(处于cbg一组),初始处于未被选中状态
    Checkbox female = new Checkbox("女" , cbg , false);
    //定义一个复选框(处于cbg一组),初始处于未被选中状态
    Checkbox married = new Checkbox("是否已婚" , false);
    //定义一个下拉选择框
    Choice color = new Choice();
    //定义一个列表选择框
    List colorList = new List(6 , true);
    //定义一个5行、20列的多行文本域
    TextArea ta = new TextArea(5 , 20);
    //定义一个50列的单行文本框
    TextField name = new TextField(50);
    public void init() {
        color.add("红色");
        color.add("绿色");
        color.add("蓝色");
        colorList.add("红色");
        colorList.add("绿色");
        colorList.add("蓝色");
        //创建一个装载了文本框按钮的 Panel
        Panel bottom = new Panel();
        bottom.add(name);
        bottom.add(ok);
        f.add(bottom, BorderLayout.SOUTH);
        //创建一个装载了下拉选择框、三个 Checkbox 的 Panel
        Panel checkPanel = new Panel();
        checkPanel.add(color);
        checkPanel.add(male);
        checkPanel.add(female);
        checkPanel.add(married);
        //创建一个垂直排列组件的Box,盛装多行文本域,Panel
        Box topLeft = Box.createVerticalBox();
        topLeft.add(ta);
        topLeft.add(checkPanel);
        //创建一个水平排列组件的Box,盛装 topLeft、colorList
        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);
        // 将top Box 容器添加到窗口的中间
        f.add(top);
        f.pack();
        f.setVisible(true);
    }
    public static void main(String[] args) {

        new ComponentTest().init();

    }

}

程序运行效果如下:
这里写图片描述

二、对话框(Dialog)

Dialog 是 Window 类的子类,是一个容器类,属于特殊组件,对话框是可以独立存在的顶级窗口,因此用法与普通窗口的用法几乎完全一样,但对话框有如下亮点需要注意。

  1. 对话框通常依赖于其他窗口,就是通常有一个 parent 窗口。
  2. 对话框有非模式(non-modal)和模式(modal)两种,当某个模式对话框被打开之后,该模式对话框总是位于它依赖的窗口之上;在模式对话框被关闭之前,它依赖的窗口无法获得焦点。

对话框有多个重载的构造器,他的构造器可能有如下三个参数:

  • owner:指定该对话框所依赖的窗口,既可以是窗口,也可以是对话框。
  • title:指定该对话窗的窗口标题。
  • modal:指定该对话框是否是模式的,可以是 true 或 false。

下面的例子程序示范了模式对话框和非模式对话框的用法。

public class DialogTest {

    Frame f = new Frame("测试");
    Dialog d1 = new Dialog(f,"模式对话框",true);
    Dialog d2 = new Dialog(f,"非模式对话框",false);
    Button b1 = new Button("打开模式对话框");
    Button b2 = new Button("打开非模式对话框");
    public void init() {
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        d2.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                d2.dispose();
            }
        });
        d1.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                d1.dispose();
            }
        });
        d1.setBounds(20, 30, 300, 400);
        d2.setBounds(20, 30, 300, 400);
        b1.addActionListener(e -> d1.setVisible(true));
        b2.addActionListener(e -> d2.setVisible(true));
        f.add(b1);
        f.add(b2,BorderLayout.SOUTH);
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {

        new DialogTest().init();

    }

}

上面程序创建了 d1 和 d2 两个对话框,其中 d1 是一个模式对话框,而 d2 是一个非模式对话框(两个对话框都是空的)。该窗口还提供了两个测试按钮,分别用于打开模式对话框和非模式对话框。打开模式对话框后鼠标无法激活原来的 “测试窗口”;但打开非模式对话框后还可以激活原来的 “测试窗口”。


Dialog 类还有一个子类:FIleDialog,它代表一个文件对话框,用于打开或保存文件。FIleDialog 也提供了几个构造器,可分别支持 parent、title 和 mode 三个构造参数,其中 parent、title 指定文件对话框的所属父窗口和标题;而 mode 指定该窗口用于打开文件或保存文件,该参数支持如下两个参数值:FileDialog.LOAD、FileDialog.SAVE。

FileDialog 提供了如下两个方法来获取被打开/保存文件的绝对路径。

  • getDirectory():获取 FileDialog 被打开/保存文件的绝对路径。
  • getFile:获取 FileDialog 被打开/保存文件的文件名。

下面程序分别示范了使用 FileDialog 来创建打开/保存文件的对话框。

public class FileDIalogTest {

    Frame f = new Frame("测试");
    FileDialog d1 = new FileDialog(f,"选择需要打开的文件",FileDialog.LOAD);
    FileDialog d2 = new FileDialog(f,"选择保存文件的路径",FileDialog.SAVE);
    Button b1 = new Button("打开文件");
    Button b2 = new Button("保存文件");

    public void init() {
        b1.addActionListener(e -> {
            d1.setVisible(true);
            System.out.println(d1.getDirectory()+d1.getFile());
        });
        b2.addActionListener(e -> {
            d2.setVisible(true);
            System.out.println(d2.getDirectory() + d2.getFile());
        });
        f.add(b1);
        f.add(b2,BorderLayout.SOUTH);
        f.pack();
        f.setVisible(true);
    }


    public static void main(String[] args) {

        new FileDIalogTest().init();

    }

}

                                                                                        **end**
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值