Java图形化界面编程—— 基本组件和对话框 笔记

2.5 AWT中常用组件

2.5.1 基本组件

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

这些 AWT 组件的用法比较简单,可以查阅 API 文档来获取它们各自的构方法、成员方法等详细信息。

案例:

​ 实现下图效果:

java 复制代码
import javax.swing.*;
import java.awt.*;
public class BasicComponentDemo {
    //之前我们演示的时候,是在main函数里面完成的。但现在我们要做的界面比之前的界面要复杂很多,所以我们重新设计一下
    //未来我们设计复杂界面时,会把组件在成员变量处组建,来方便使用,
    //若多个组件来组成一个子界面时,可以设计一个方法来组装界面。然后在main函数中调用这个方法。

    Frame frame = new Frame("这里测试基本组件");

    //创建组件
    TextArea ta = new TextArea(5,20);//一个五行二十列的文本框

    Choice colorChooser = new Choice();//包含颜色的下拉选择框

    CheckboxGroup cbg = new CheckboxGroup();//性别单选框
    Checkbox male = new Checkbox("男", cbg, true);
    Checkbox female = new Checkbox("女", cbg, false);

    Checkbox isMarried = new Checkbox("是否已婚?");  //复选框

    TextField tf = new TextField(50); //20宽单行文本框
    Button ok = new Button("确认");  //确认按钮

    List colorlist = new List(6,true);//六行的列表框,不写ture是单选,写true是多选

    public void init() {
        //组装界面

        //组装底部
        Box bBox = Box.createHorizontalBox();
        bBox.add(tf);
        bBox.add(ok);

        frame.add(bBox,BorderLayout.SOUTH);

        //组装选择部分
        colorChooser.add("红色");
        colorChooser.add("蓝色");
        colorChooser.add("绿色");

        Box cBox = Box.createHorizontalBox();
        cBox.add(colorChooser);
        cBox.add(male);
        cBox.add(female);
        cBox.add(isMarried);

        //组装文本域和选择部分
        Box topLeft = Box.createVerticalBox();
        topLeft.add(ta);
        topLeft.add(cBox);

        //组装顶部左边和列表框
        colorlist.add("红色");
        colorlist.add("蓝色");
        colorlist.add("绿色");


        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorlist);

        frame.add(top);

        //设置frame为最佳大小和可见性
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new BasicComponentDemo().init();
    }
}

2.5.2 对话框Dialog

2.5.2.1 Dialog

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

  • 但对话框通常依赖于其他窗口,就是通常需要有一个父窗口
  • 对话框有非模式(non-modal) 模式(modal)两种,当某个模式对话框被打开后,该模式 对话框总是位于它的父窗口之上,在模式对话框被关闭之前,父窗口无法获得焦点。
方法名称 方法功能
Dialog(Frame owner, String title, boolean modal) 创建一个对话框对象: owner:当前对话框的父窗口 title:当前对话框的标题 modal:当前对话框是否是模式对话框,true/false

案例1:

​ 通过Frame、Button、Dialog实现下图效果:

java 复制代码
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class DialogDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("这里测试Dialog");

        //1.创建对话框Dialog对象(一个模式一个非模式)
        Dialog d1 = new Dialog(frame, "模式对话框", true);
        Dialog d2 = new Dialog(frame, "非模式对话框", false);

        //2.通过setBounds方法设置对话框的位置和大小
        d1.setBounds(20,30,300,200);
        d2.setBounds(20,30,300,200);

        //3.创建两个按钮
        Button b1 = new Button("打开模式对话框");
        Button b2 = new Button("打开非模式对话框");

        //4.给这两个按钮添加点击后的行为(事件)
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d2.setVisible(true);
            }
        });

        //5.把按钮添加到frame中
        frame.add(b1,BorderLayout.NORTH);
        frame.add(b2);

        frame.pack();
        frame.setVisible(true);
    }
}

在Dialog对话框中,可以根据需求,自定义内容

案例:

​ 点击按钮,弹出一个模式对话框,其内容如下:

java 复制代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class DialogDemo2 {
    public static void main(String[] args) {
        Frame frame = new Frame("这里测试Dialog");

        //1.创建对话框Dialog对象
        Dialog d1 = new Dialog(frame, "模式对话框", true);

        //创建一个垂直的Box容器,把一个文本框和一个按钮添加到Box容器中
        Box vBox = Box.createVerticalBox();
        vBox.add(new TextField(20));
        vBox.add(new Button("确认"));

        //把Box容器添加到Dialog中
        d1.add(vBox);

        //2.通过setBounds方法设置对话框的位置和大小
        d1.setBounds(20,30,300,200);

        //3.创建按钮
        Button b1 = new Button("打开模式对话框");

        //4.给按钮添加点击后的行为(事件)
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
            }
        });

        //5.把按钮添加到frame中
        frame.add(b1,BorderLayout.NORTH);

        frame.pack();
        frame.setVisible(true);
    }
}
2.5.2.1 FileDialog

Dialog 类还有 一个子类 : FileDialog ,它代表一个文件对话框 ,用于 打开或者保存 文件 ,需要注意的是FileDialog无法指定模态或者非模态 ,这是因为 FileDialog 依赖于运行平台的实现,如果运行平台的文件对话框是模态的,那么 FileDialog 也是模态的;否则就是非模态的 。

方法名称 方法功能
FileDialog(Frame parent, String title, int mode) 创建一个文件对话框: parent:指定父窗口 title:对话框标题 mode:文件对话框类型,如果指定为FileDialog.load,用于打开文件 ,如果指定为FileDialog.SAVE,用于保存文件
String getDirectory() 获取被打开或保存文件的绝对路径
String getFile() 获取被打开或保存文件的文件名

案例2:

​ 使用 Frame、Button和FileDialog完成下图效果:

java 复制代码
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class FileDialogDemo {
    public static void main(String[] args) {

        Frame frame = new Frame();

        //1.创建两个FileDialog对象
        FileDialog f1 = new FileDialog(frame, "选择要打开的文件", FileDialog.LOAD);
        FileDialog f2 = new FileDialog(frame, "选择要保存的文件", FileDialog.SAVE);

        //2.创建两个按钮
        Button b1 = new Button("打开文件");
        Button b2 = new Button("保存文件");

        //3.给这两个按钮设置点解后的行为:获取打开或保存的路径文件名
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                f1.setVisible(true);//代码会停到这里

                //获取选择的路径及文件
                String directory = f1.getDirectory();
                String file = f1.getFile();
                System.out.println(
                        "打开的文件路径为"+directory
                );
                System.out.println(
                        "打开的文件名称为"+file
                );
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                f2.setVisible(true);

                //获取选择的路径及文件
                String directory = f1.getDirectory();
                String file = f1.getFile();
                System.out.println(
                        "保存的文件路径为"+directory
                );
                System.out.println(
                        "保存的文件名称为"+file
                );
            }
        });
        //4.把按钮添加到Frame中
        frame.add(b1,BorderLayout.NORTH);
        frame.add(b2);

        //设置frame为最佳大小和可见性
        frame.pack();
        frame.setVisible(true);
    }
}
相关推荐
转码的小石1 分钟前
12/21java基础
java
高山我梦口香糖9 分钟前
[react]searchParams转普通对象
开发语言·前端·javascript
李小白669 分钟前
Spring MVC(上)
java·spring·mvc
冷眼看人间恩怨21 分钟前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
GoodStudyAndDayDayUp22 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
信号处理学渣30 分钟前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客31 分钟前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
jasmine s40 分钟前
Pandas
开发语言·python
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗1 小时前
常用类晨考day15
java