• java-GUI编程之AWT组件


    AWT中常用组件

    基本组件

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

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

    API 文档地址:https://www.apiref.com/java11-zh/java.desktop/javax/swing/package-summary.html

    案例:

    ​ 实现下图效果:


    演示代码:

    import javax.swing.*;
    import java.awt.*;
    
    public class BasicComponentDemo {
        Frame frame = new Frame("这里测试基本组件");
    
        //定义一个按钮
        Button ok = new Button("确认");
    
        //定义一个复选框组
        CheckboxGroup cbg = new CheckboxGroup();
        //定义一个单选框,初始处于被选中状态,并添加到cbg组中
        Checkbox male = new Checkbox("男", cbg, true);
    
        //定义一个单选框,初始处于未被选中状态,并添加到cbg组中
        Checkbox female = new Checkbox("女", cbg, false);
    
        //定义一个复选框,初始处于未被选中状态
        Checkbox married = new Checkbox("是否已婚?", false);
    
        //定义一个下拉选择框
        Choice colorChooser = new Choice();
    
        //定义一个列表选择框
        List colorList = new List(6, true);
    
        //定义一个5行,20列的多行文本域
        TextArea ta = new TextArea(5, 20);
    
        //定义一个50列的单行文本域
        TextField tf = new TextField(50);
    
        public void init() {
            //往下拉选择框中添加内容
            colorChooser.add("红色");
            colorChooser.add("绿色");
            colorChooser.add("蓝色");
    
            //往列表选择框中添加内容
            colorList.add("红色");
            colorList.add("绿色");
            colorList.add("蓝色");
    
            //创建一个装载按钮和文本框的Panel容器
            Panel bottom = new Panel();
            bottom.add(tf);
            bottom.add(ok);
    
            //把bottom添加到Frame的底部
            frame.add(bottom,BorderLayout.SOUTH);
    
            //创建一个Panel容器,装载下拉选择框,单选框和复选框
            Panel checkPanel = new Panel();
            checkPanel.add(colorChooser);
            checkPanel.add(male);
            checkPanel.add(female);
            checkPanel.add(married);
    
            //创建一个垂直排列的Box容器,装载 多行文本域和checkPanel
            Box topLeft = Box.createVerticalBox();
            topLeft.add(ta);
            topLeft.add(checkPanel);
    
            //创建一个水平排列的Box容器,装载topLeft和列表选择框
            Box top = Box.createHorizontalBox();
            top.add(topLeft);
            top.add(colorList);
    
            //将top添加到frame的中间区域
            frame.add(top);
    
    
            //设置frame最佳大小并可见
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
    
            new BasicComponentDemo().init();
    
        }
    }
    
    

    对话框Dialog

    Dialog

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

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

    模式窗体:你必须关闭该窗体,才能操作其它窗体;比如说,必须按确定或取消,或者按关闭。
    非模式窗体:不必关闭该窗体,就可转换到其它窗体上进行操作。

    方法名称 方法功能
    Dialog(Frame owner, String title, boolean modal) 创建一个对话框对象:
    owner:当前对话框的父窗口
    title:当前对话框的标题
    modal:当前对话框是否是模式对话框,true/false

    案例1:

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

    演示代码1:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.*;
    
    public class DialogDemo1 {
    
        public static void main(String[] args) {
    
            Frame frame = new Frame("这里测试Dialog");
    
            Dialog d1 = new Dialog(frame, "模式对话框", true);
            Dialog d2 = new Dialog(frame, "非模式对话框", false);
    
            Button b1 = new Button("打开模式对话框");
            Button b2 = new Button("打开非模式对话框");
    
            //设置对话框的大小和位置
            d1.setBounds(20,30,300,400);
            d2.setBounds(20,30,300,400);
    
            //给b1和b2绑定监听事件
            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);
                }
            });
    
            //把按钮添加到frame中
            frame.add(b1);
            frame.add(b2,BorderLayout.SOUTH);
    
            //设置frame最佳大小并可见
            frame.pack();
            frame.setVisible(true);
    
        }
    }
    

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

    案例:

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

    演示代码:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.Box;
    import javax.swing.JButton;
    import java.awt.*;
    
    public class DialogDemo2 {
    
        public static void main(String[] args) {
    
            Frame frame = new Frame("这里测试Dialog");
    
            Dialog d1 = new Dialog(frame, "模式对话框", true);
    
            //往对话框中添加内容
            Box vBox = Box.createVerticalBox();
    
            vBox.add(new TextField(15));
            vBox.add(new JButton("确认"));
            d1.add(vBox);
    
            Button b1 = new Button("打开模式对话框");
    
            //设置对话框的大小和位置
            d1.setBounds(20,30,200,100);
    
    
            //给b1绑定监听事件
            b1.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    d1.setVisible(true);
                }
            });
    
    
            //把按钮添加到frame中
            frame.add(b1);
    
            //设置frame最佳大小并可见
            frame.pack();
            frame.setVisible(true);
    
        }
    }
    

    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完成下图效果:

    演示代码2:

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class FileDialogTest {
    
        public static void main(String[] args) {
    
            Frame frame = new Frame("这里测试FileDialog");
    
            FileDialog d1 = new FileDialog(frame, "选择需要加载的文件", FileDialog.LOAD);
            FileDialog d2 = new FileDialog(frame, "选择需要保存的文件", FileDialog.SAVE);
    
            Button b1 = new Button("打开文件");
            Button b2 = new Button("保存文件");
    
            //给按钮添加事件
            b1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    d1.setVisible(true);
                    //打印用户选择的文件路径和名称
                    System.out.println("用户选择的文件路径:"+d1.getDirectory());
                    System.out.println("用户选择的文件名称:"+d1.getFile());
                }
            });
    
            System.out.println("-------------------------------");
            b2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    d2.setVisible(true);
                    //打印用户选择的文件路径和名称
                    System.out.println("用户选择的文件路径:"+d2.getDirectory());
                    System.out.println("用户选择的文件名称:"+d2.getFile());
                }
            });
    
            //添加按钮到frame中
    
            frame.add(b1);
            frame.add(b2,BorderLayout.SOUTH);
    
            //设置frame最佳大小并可见
            frame.pack();
            frame.setVisible(true);
        }
    }
    

    个人博客本文地址:https://kohler19.gitee.io/2022/04/05/java-GUI2/

    个人博客:https://kohler19.gitee.io/
    公众号:“愚生浅末”


    __EOF__

    本文作者愚生浅末
    本文链接https://www.cnblogs.com/kohler21/p/16102099.html
    关于博主:评论和私信会在第一时间回复。或者直接私信我。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
  • 相关阅读:
    04数据存储规则/进制转换/文本(数字字母汉字)图片(黑白图灰度图彩色图)声音的存储
    python项目之AI动物识别工具的设计与实现(django)
    【Linux学习】- POSIX多线程技术
    详解HashMap源码解析(下)
    《银行法律法规》三、银行管理——4、资本管理
    前端工程师面试题详解(二)
    神经网络训练数据集大小,神经网络输入图片大小
    软考-流量分析
    python基础知识整理 04-文件、函数
    Touch命令使用指南:创建、更新和修改文件时间戳
  • 原文地址:https://www.cnblogs.com/kohler21/p/16102099.html