为您推荐:
精华内容
最热下载
问答
  • 5星
    13.87MB qq_52889967 2021-08-07 18:14:40
  • 5星
    150KB m0_52957036 2020-06-11 22:05:17
  • 5星
    50.97MB qq_40957277 2021-06-11 23:18:59
  • 20KB dimo__ 2018-12-10 11:05:57
  • 285KB weixin_38628175 2020-08-28 19:44:41
  • 20.1MB zys_1997 2017-05-05 18:51:32
  • 3KB weixin_45881004 2019-11-14 21:20:11
  • 关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例。 程序是为了方便用户使用的,Java引入图形化界面编程。 1.JFrame 是容器类 2.AWT 是抽象窗口组件工具包,是 Java...

     

    关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例。

    程序是为了方便用户使用的,Java引入图形化界面编程。

    1.JFrame 是容器类

    2.AWT 是抽象窗口组件工具包,是 Java 最早的用于编写图形节目应用程序的开发包。

    3.Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。

    代码实例1:

    复制代码

    package com.zhouzhou;
    //练习网格布局
    import java.awt.*;
    import javax.swing.*;
    
    public class Demo9 extends JFrame {
        // 定义组件
        int size = 9;
        JButton jbs[] = new JButton[size];
    
        public static void main(String[] args) {
            // 创建实例
            Demo9 de = new Demo9();
        }
    
        // 构造函数
        public Demo9() {
    
            // 创建组件
            for (int i = 0; i < size; i++) {
                jbs[i] = new JButton(String.valueOf(i));
            }
            // 设置网格布局,这里只有前两个参数(行/列)3和3 的话,网格没有空隙
            this.setLayout(new GridLayout(3, 3, 10, 10));
    
            // 添加组件
            for (int i = 0; i < size; i++) {
                this.add(jbs[i]);
            }
            // 设置窗体属性
            this.setTitle("网格布局案例");
            this.setSize(300, 400);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLocation(200, 200);
    
            // 显示
            this.setVisible(true);
        }
    }

    复制代码

    代码实例2:

    复制代码

    package com.zhouzhou;
    
    import java.awt.*;
    import javax.swing.*;
    
    public class Demo10 extends JFrame {
        // 定义组件
        JPanel jp1, jp2;
        JButton jb1, jb2, jb3, jb4, jb5, jb6;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo10 de = new Demo10();
        }
    
        // 构造函数
        public Demo10() {
            // 创建组件
    
            jp1 = new JPanel();
            jp2 = new JPanel();
    
            jb1 = new JButton("西瓜");
            jb2 = new JButton("苹果");
            jb3 = new JButton("荔枝");
            jb4 = new JButton("葡萄");
            jb5 = new JButton("桔子");
            jb6 = new JButton("香蕉");
    
            // 设置布局管理器,
            //JPanel布局默认是BorderLoyout// 添加JPanel
            //JPanel属于容器类组件,可以加入别的组件
            jp1.add(jb1);
            jp1.add(jb2);
            
            jp2.add(jb3);
            jp2.add(jb4);
            jp2.add(jb5);
    
            // 把jpanel 加入JFrame
            this.add(jp1, BorderLayout.NORTH);
            this.add(jb6, BorderLayout.CENTER);
            this.add(jp2, BorderLayout.SOUTH);
    
            this.setSize(300, 400);
            this.setLocation(200, 200);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    }

    复制代码

    代码实例3:

    复制代码

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo11 extends JFrame {
    
        // 定义组件
        JPanel jp1, jp2, jp3;
        JLabel jlb1, jlb2;
        JButton jb1, jb2;
        JTextField jtf1;
        JPasswordField jpf1;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo11 d1 = new Demo11();
    
        }
    
        // 构造函数
        public Demo11() {
    
            jp1 = new JPanel();
            jp2 = new JPanel();
            jp3 = new JPanel();
    
            jlb1 = new JLabel("用户名");
            jlb2 = new JLabel("密    码");
    
            jb1 = new JButton("登录");
            jb2 = new JButton("取消");
    
            jtf1 = new JTextField(10);
    
            jpf1 = new JPasswordField(10);// 设置布局管理(上面忘记:extends JFrame,这里出错了)
            this.setLayout(new GridLayout(3, 1));
    
            // 加入各个组件
            jp1.add(jlb1);
            jp1.add(jtf1);
    
            jp2.add(jlb2);
            jp2.add(jpf1);
    
            jp3.add(jb1);
            jp3.add(jb2);
    
            // 加入到JFrame
            this.add(jp1);
            this.add(jp2);
            this.add(jp3);
    
            this.setSize(250, 150);
            this.setTitle("登录");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    }

    复制代码

    代码实例4:

    复制代码

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo12 extends JFrame {
    
        // 定义组件
        JPanel jp1, jp2, jp3;
        JLabel jlb1, jlb2;
        JCheckBox jcb1, jcb2, jcb3;
        JRadioButton jrb1, jrb2;
        JButton jb1, jb2;
        // 单选设置
        ButtonGroup bg, bg2;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo12 d2 = new Demo12();
    
        }
    
        // 构造函数
        public Demo12() {
            jp1 = new JPanel();
            jp2 = new JPanel();
            jp3 = new JPanel();
    
            jlb1 = new JLabel("你喜欢的运动");
            jlb2 = new JLabel("你的性别");
    
            jcb1 = new JCheckBox("足球");
            jcb2 = new JCheckBox("篮球");
            jcb3 = new JCheckBox("网球");
            // 下面可以设置单选
            // ButtonGroup bg2=new ButtonGroup();
            // bg2.add(jcb1);
            // bg2.add(jcb2);
            // bg2.add(jcb2);
    
            jrb1 = new JRadioButton("男");
            jrb2 = new JRadioButton("女");
            // 一定要把jrb1,jrb2放入到一个ButtonGroup里面
            ButtonGroup bg = new ButtonGroup();
            bg.add(jrb1);
            bg.add(jrb2);
    
            jb1 = new JButton("注册用户");
            jb2 = new JButton("取消用户");
    
            this.setLayout(new GridLayout(3, 1));
    
            jp1.add(jlb1);
            jp1.add(jcb1);
            jp1.add(jcb2);
            jp1.add(jcb3);
    
            jp2.add(jlb2);
            jp2.add(jrb1);
            jp2.add(jrb2);
    
            jp3.add(jb1);
            jp3.add(jb2);
    
            // 加入到JFrame
            this.add(jp1);
            this.add(jp2);
            this.add(jp3);
    
            this.setSize(300, 200);
            this.setTitle("用户注册界面");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
    
        }
    }

    复制代码

    代码实例5:

    复制代码

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo13 extends JFrame {
        // 定义组件
        JPanel jp1, jp2;
        JLabel jlb1, jlb2;
        JComboBox jcb1;
        JList jl1;
        JScrollPane jsp;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo13 d3 = new Demo13();
        }
    
        public Demo13() {
    
            jp1 = new JPanel();
            jp2 = new JPanel();
    
            jlb1 = new JLabel("您的籍贯是");
            jlb2 = new JLabel("您喜欢旅游的地区");
    
            String[] jg = { "北京", "上海", "天津", "重庆", "江苏" };
            jcb1 = new JComboBox(jg);
    
            String[] jg2 = { "故宫", "长城", "九寨沟", "天安门", "火星" };
            jl1 = new JList(jg2);
            // 设置你希望显示多少个选项
            jl1.setVisibleRowCount(1);
            jsp = new JScrollPane(jl1);
    
            // 布局管理
            this.setLayout(new GridLayout(3, 1));
    
            // 添加组件
            jp1.add(jlb1);
            jp1.add(jcb1);
    
            jp2.add(jlb2);
            jp2.add(jsp);
    
            this.add(jp1);
            this.add(jp2);
    
            this.setSize(300, 400);
            this.setTitle("下拉框练习");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
    
        }
    
    }

    复制代码

    代码实例6:

    复制代码

    package com.zhouzhou;
    
    import java.awt.*;
    import javax.swing.*;
    
    public class Demo14 extends JFrame {
    
        // 定义组件
        JSplitPane jsp;
        JList jList;
        JLabel jl1;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo14 d4 = new Demo14();
    
        }
    
        public Demo14() {
    
            // 创建组件
            String[] words = { "boy", "gril", "bird", "box" };
            jList = new JList(words);
    
            // JLabel可以放置图片
            jl1 = new JLabel(new ImageIcon("images/1.jpeg"));
    
            // 拆分窗格
            jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jList, jl1);
            // 可以手动伸缩变化
            jsp.setOneTouchExpandable(true);
    
            // 设置布局管理器,它本身就是borderLayout布局,就不用再设置了
    
            // 添加组件
            this.add(jsp);
    
            this.setSize(400, 300);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
    
        }
    }

    复制代码

    代码实例7:

    复制代码

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo15 extends JFrame {
    
        // 定义组件
        JTextArea jta = null;// 多行文本框
        JScrollPane jsp = null;
        JPanel jp1 = null;// 面板
        JComboBox jcb = null;// 下拉框组件
        JTextField jtf = null;// 文本框
        JButton jb = null;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo15 d5 = new Demo15();
    
        }
    
        // 构造函数
        public Demo15() {
            // 多行文本框会根据情况自己调节大小
            jta = new JTextArea();
            jsp = new JScrollPane(jta);
            jp1 = new JPanel();
            String j2[] = { "北京", "商行", "农行", "师大", "附中", "哈尔滨" };
            jcb = new JComboBox(j2);
            // 文本框最好设置初值
            jtf = new JTextField(10);
            jb = new JButton("发送");
            // 布局管理
            // this.setLayout(new GridLayout(1, 1));
            // 添加
            jp1.add(jcb);
            jp1.add(jtf);
            jp1.add(jb);
            // 多行文本框是放在这里(JFrame)的!!!
            // 因为上面又添加可以滚动的功能,这里传入jsp,而不是jta
            this.add(jsp);
            // 下面这里就需要定位处理
            this.add(jp1, BorderLayout.SOUTH);
    
            // 设置窗体属性,z这里很厉害!!
            this.setIconImage((new ImageIcon("images\\3.jpg")).getImage());
    
            this.setSize(300, 200);
            this.setTitle("QQ登录");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
    
        }
    }

    复制代码

    代码实例8:

    复制代码

    package com.zhouzhou;
    
    //QQ登录界面制作
    import java.awt.*;
    import javax.swing.*;
    
    public class Demo16 extends JFrame {
    
        // 北部区域
        JLabel jl1;
    
        // 南部区域
        JButton jb1, jb2, jb3;
        JPanel jp1;
    
        // 中部区域
        JTabbedPane jtp;// 选项卡窗格
        JPanel jp2, jp3, jp4;
    
        JLabel jl2, jl3, jl4, jl5;
        // 号码输入文本框
        JTextField jtf;
        // 密码
        JPasswordField jpf;
        // 清除号码
        JButton jb4;
        // 隐身登录、记住密码
        JCheckBox jcb1, jcb2;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new Demo16();
    
        }
    
        public Demo16() {
    
            // 创建组件
            jl2 = new JLabel("QQ号码", JLabel.CENTER);
            jl3 = new JLabel("QQ密码", JLabel.CENTER);
            jl4 = new JLabel("忘记密码", JLabel.CENTER);
            jl4.setFont(new Font("宋体", Font.PLAIN, 16));// 设置字体样式
            jl4.setForeground(Color.BLUE);// 设置字体颜色
            jl5 = new JLabel("<html><a href='www.qq.com'>申请密码保护</a></html>");
            // 鼠标触发变化
            jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    
            jtf = new JTextField();
            jpf = new JPasswordField();
            jb4 = new JButton(new ImageIcon("images\\login.png"));
    
            jcb1 = new JCheckBox("隐身登录");
            jcb2 = new JCheckBox("记住密码");
    
            // 北部区域
            jl1 = new JLabel(new ImageIcon("images\\headpicture.jpg"));
    
            // 南部区域
            jp1 = new JPanel();
            jb1 = new JButton(new ImageIcon("images\\login.png"));
            jb2 = new JButton(new ImageIcon("images\\delete.png"));
            jb3 = new JButton(new ImageIcon("images\\register.png"));
    
            // 中部区域
            jtp = new JTabbedPane();
            jp2 = new JPanel();
            jp3 = new JPanel();
            jp3.setBackground(Color.RED);// 给面板设置背景
            jp4 = new JPanel();
            jp4.setBackground(new Color(0, 0, 255));
    
            // 将面板添加到选项卡窗格上
            jtp.add("QQ号码", jp2);// 参数:选项卡名称,面板
            jtp.add("手机号码", jp3);
            jtp.add("电子邮箱", jp4);
    
            // 设置布局
            jp2.setLayout(new GridLayout(3, 3));
    
            // 添加组件
            jp1.add(jb1);
            jp1.add(jb2);
            jp1.add(jb3);
    
            jp2.add(jl2);
            jp2.add(jtf);
            jp2.add(jb4);
            jp2.add(jl3);
            jp2.add(jpf);
            jp2.add(jl4);
            jp2.add(jcb1);
            jp2.add(jcb2);
            jp2.add(jl5);
    
            this.add(jp1, BorderLayout.SOUTH);
            this.add(jl1, BorderLayout.NORTH);
            this.add(jtp, BorderLayout.CENTER);
    
            // 展示组件
            ImageIcon icon = new ImageIcon("images\\qq.png");
            this.setIconImage(icon.getImage());// 给窗体设置图标方法
            this.setSize(400, 380);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
    
        }
    }

    复制代码

    代码实例9:

    按 Ctrl+C 复制代码

     

    按 Ctrl+C 复制代码

     

     

    原大神代码地址:https://www.cnblogs.com/1693977889zz/p/8377461.html

    展开全文
    qq_42060456 2018-09-20 11:51:17
  • 429KB zpl19880112 2021-10-01 00:11:48
  • 我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。...关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入...


    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
    扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
    推荐文章:Java 面试知识点解析Mysql优化技巧(数据库设计、命名规范、索引优化

     

    关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例。

     

    程序是为了方便用户使用的,Java引入图形化界面编程。

    1.JFrame 是容器类

    2.AWT 是抽象窗口组件工具包,是 Java 最早的用于编写图形节目应用程序的开发包。

    3.Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。

    代码实例1:

     

    package com.zhouzhou;
    
    //练习网格布局
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo9 extends JFrame {
    
        // 定义组件
    
        int size = 9;
    
        JButton jbs[] = new JButton[size];
    
        public static void main(String[] args) {
    
            // 创建实例
    
            Demo9 de = new Demo9();
    
        }
    
        // 构造函数
    
        public Demo9() {
    
            // 创建组件
    
            for (int i = 0; i < size; i++) {
    
                jbs[i] = new JButton(String.valueOf(i));
    
            }
    
            // 设置网格布局,这里只有前两个参数(行/列)3和3 的话,网格没有空隙
    
            this.setLayout(new GridLayout(3, 3, 10, 10));
    
            // 添加组件
    
            for (int i = 0; i < size; i++) {
    
                this.add(jbs[i]);
    
            }
    
            // 设置窗体属性
    
            this.setTitle("网格布局案例");
    
            this.setSize(300, 400);
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setLocation(200, 200);
    
            // 显示
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例2:

     

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo10 extends JFrame {
    
        // 定义组件
    
        JPanel jp1, jp2;
    
        JButton jb1, jb2, jb3, jb4, jb5, jb6;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            Demo10 de = new Demo10();
    
        }
    
        // 构造函数
    
        public Demo10() {
    
            // 创建组件
    
    
    
            jp1 = new JPanel();
    
            jp2 = new JPanel();
    
            jb1 = new JButton("西瓜");
    
            jb2 = new JButton("苹果");
    
            jb3 = new JButton("荔枝");
    
            jb4 = new JButton("葡萄");
    
            jb5 = new JButton("桔子");
    
            jb6 = new JButton("香蕉");
    
            // 设置布局管理器,
            //JPanel布局默认是BorderLoyout// 添加JPanel
    
            //JPanel属于容器类组件,可以加入别的组件
    
            jp1.add(jb1);
    
            jp1.add(jb2);
    
            
    
            jp2.add(jb3);
    
            jp2.add(jb4);
    
            jp2.add(jb5);
    
            // 把jpanel 加入JFrame
    
            this.add(jp1, BorderLayout.NORTH);
    
            this.add(jb6, BorderLayout.CENTER);
    
            this.add(jp2, BorderLayout.SOUTH);
    
            this.setSize(300, 400);
    
            this.setLocation(200, 200);
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例3:

     

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo11 extends JFrame {
    
        // 定义组件
    
        JPanel jp1, jp2, jp3;
    
        JLabel jlb1, jlb2;
    
        JButton jb1, jb2;
    
        JTextField jtf1;
    
        JPasswordField jpf1;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            Demo11 d1 = new Demo11();
    
        }
    
        // 构造函数
    
        public Demo11() {
    
            jp1 = new JPanel();
    
            jp2 = new JPanel();
    
            jp3 = new JPanel();
    
            jlb1 = new JLabel("用户名");
    
            jlb2 = new JLabel("密    码");
    
            jb1 = new JButton("登录");
    
            jb2 = new JButton("取消");
    
            jtf1 = new JTextField(10);
    
            jpf1 = new JPasswordField(10);// 设置布局管理(上面忘记:extends JFrame,这里出错了)
    
            this.setLayout(new GridLayout(3, 1));
    
            // 加入各个组件
    
            jp1.add(jlb1);
    
            jp1.add(jtf1);
    
            jp2.add(jlb2);
    
            jp2.add(jpf1);
    
            jp3.add(jb1);
    
            jp3.add(jb2);
    
            // 加入到JFrame
    
            this.add(jp1);
    
            this.add(jp2);
    
            this.add(jp3);
    
            this.setSize(250, 150);
    
            this.setTitle("登录");
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例4:

     

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo12 extends JFrame {
    
        // 定义组件
    
        JPanel jp1, jp2, jp3;
    
        JLabel jlb1, jlb2;
    
        JCheckBox jcb1, jcb2, jcb3;
    
        JRadioButton jrb1, jrb2;
    
        JButton jb1, jb2;
    
        // 单选设置
    
        ButtonGroup bg, bg2;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            Demo12 d2 = new Demo12();
    
        }
    
        // 构造函数
    
        public Demo12() {
    
            jp1 = new JPanel();
    
            jp2 = new JPanel();
    
            jp3 = new JPanel();
    
            jlb1 = new JLabel("你喜欢的运动");
    
            jlb2 = new JLabel("你的性别");
    
            jcb1 = new JCheckBox("足球");
    
            jcb2 = new JCheckBox("篮球");
    
            jcb3 = new JCheckBox("网球");
    
            // 下面可以设置单选
    
            // ButtonGroup bg2=new ButtonGroup();
    
            // bg2.add(jcb1);
    
            // bg2.add(jcb2);
    
            // bg2.add(jcb2);
    
    
    
            jrb1 = new JRadioButton("男");
    
            jrb2 = new JRadioButton("女");
    
            // 一定要把jrb1,jrb2放入到一个ButtonGroup里面
    
            ButtonGroup bg = new ButtonGroup();
    
            bg.add(jrb1);
    
            bg.add(jrb2);
    
            jb1 = new JButton("注册用户");
    
            jb2 = new JButton("取消用户");
    
            this.setLayout(new GridLayout(3, 1));
    
            jp1.add(jlb1);
    
            jp1.add(jcb1);
    
            jp1.add(jcb2);
    
            jp1.add(jcb3);
    
            jp2.add(jlb2);
    
            jp2.add(jrb1);
    
            jp2.add(jrb2);
    
            jp3.add(jb1);
    
            jp3.add(jb2);
    
            // 加入到JFrame
    
            this.add(jp1);
    
            this.add(jp2);
    
            this.add(jp3);
    
            this.setSize(300, 200);
    
            this.setTitle("用户注册界面");
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例5:

     

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo13 extends JFrame {
    
        // 定义组件
    
        JPanel jp1, jp2;
    
        JLabel jlb1, jlb2;
    
        JComboBox jcb1;
    
        JList jl1;
    
        JScrollPane jsp;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            Demo13 d3 = new Demo13();
    
        }
    
        public Demo13() {
    
            jp1 = new JPanel();
    
            jp2 = new JPanel();
    
            jlb1 = new JLabel("您的籍贯是");
    
            jlb2 = new JLabel("您喜欢旅游的地区");
    
            String[] jg = { "北京", "上海", "天津", "重庆", "江苏" };
    
            jcb1 = new JComboBox(jg);
    
            String[] jg2 = { "故宫", "长城", "九寨沟", "天安门", "火星" };
    
            jl1 = new JList(jg2);
    
            // 设置你希望显示多少个选项
    
            jl1.setVisibleRowCount(1);
    
            jsp = new JScrollPane(jl1);
    
            // 布局管理
    
            this.setLayout(new GridLayout(3, 1));
    
            // 添加组件
    
            jp1.add(jlb1);
    
            jp1.add(jcb1);
    
            jp2.add(jlb2);
    
            jp2.add(jsp);
    
            this.add(jp1);
    
            this.add(jp2);
    
            this.setSize(300, 400);
    
            this.setTitle("下拉框练习");
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例6:

     

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo14 extends JFrame {
    
        // 定义组件
    
        JSplitPane jsp;
    
        JList jList;
    
        JLabel jl1;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            Demo14 d4 = new Demo14();
    
        }
    
        public Demo14() {
    
            // 创建组件
    
            String[] words = { "boy", "gril", "bird", "box" };
    
            jList = new JList(words);
    
            // JLabel可以放置图片
    
            jl1 = new JLabel(new ImageIcon("images/1.jpeg"));
    
            // 拆分窗格
    
            jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jList, jl1);
    
            // 可以手动伸缩变化
    
            jsp.setOneTouchExpandable(true);
    
            // 设置布局管理器,它本身就是borderLayout布局,就不用再设置了
    
            // 添加组件
    
            this.add(jsp);
    
            this.setSize(400, 300);
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例7:

     

    package com.zhouzhou;
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo15 extends JFrame {
    
        // 定义组件
    
        JTextArea jta = null;// 多行文本框
    
        JScrollPane jsp = null;
    
        JPanel jp1 = null;// 面板
    
        JComboBox jcb = null;// 下拉框组件
    
        JTextField jtf = null;// 文本框
    
        JButton jb = null;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            Demo15 d5 = new Demo15();
    
        }
    
        // 构造函数
    
        public Demo15() {
    
            // 多行文本框会根据情况自己调节大小
    
            jta = new JTextArea();
    
            jsp = new JScrollPane(jta);
    
            jp1 = new JPanel();
    
            String j2[] = { "北京", "商行", "农行", "师大", "附中", "哈尔滨" };
    
            jcb = new JComboBox(j2);
    
            // 文本框最好设置初值
    
            jtf = new JTextField(10);
    
            jb = new JButton("发送");
    
            // 布局管理
    
            // this.setLayout(new GridLayout(1, 1));
    
            // 添加
    
            jp1.add(jcb);
    
            jp1.add(jtf);
    
            jp1.add(jb);
    
            // 多行文本框是放在这里(JFrame)的!!!
    
            // 因为上面又添加可以滚动的功能,这里传入jsp,而不是jta
    
            this.add(jsp);
    
            // 下面这里就需要定位处理
    
            this.add(jp1, BorderLayout.SOUTH);
    
            // 设置窗体属性,z这里很厉害!!
    
            this.setIconImage((new ImageIcon("images\3.jpg")).getImage());
    
            this.setSize(300, 200);
    
            this.setTitle("QQ登录");
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例8:

     

    package com.zhouzhou;
    
    //QQ登录界面制作
    
    import java.awt.*;
    
    import javax.swing.*;
    
    public class Demo16 extends JFrame {
    
        // 北部区域
    
        JLabel jl1;
    
        // 南部区域
    
        JButton jb1, jb2, jb3;
    
        JPanel jp1;
    
        // 中部区域
    
        JTabbedPane jtp;// 选项卡窗格
    
        JPanel jp2, jp3, jp4;
    
        JLabel jl2, jl3, jl4, jl5;
    
        // 号码输入文本框
    
        JTextField jtf;
    
        // 密码
    
        JPasswordField jpf;
    
        // 清除号码
    
        JButton jb4;
    
        // 隐身登录、记住密码
    
        JCheckBox jcb1, jcb2;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            new Demo16();
    
        }
    
        public Demo16() {
    
            // 创建组件
    
            jl2 = new JLabel("QQ号码", JLabel.CENTER);
    
            jl3 = new JLabel("QQ密码", JLabel.CENTER);
    
            jl4 = new JLabel("忘记密码", JLabel.CENTER);
    
            jl4.setFont(new Font("宋体", Font.PLAIN, 16));// 设置字体样式
    
            jl4.setForeground(Color.BLUE);// 设置字体颜色
    
            jl5 = new JLabel("<html><a href='www.qq.com'>申请密码保护</a></html>");
    
            // 鼠标触发变化
    
            jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    
            jtf = new JTextField();
    
            jpf = new JPasswordField();
    
            jb4 = new JButton(new ImageIcon("images\login.png"));
    
            jcb1 = new JCheckBox("隐身登录");
    
            jcb2 = new JCheckBox("记住密码");
    
            // 北部区域
    
            jl1 = new JLabel(new ImageIcon("images\headpicture.jpg"));
    
            // 南部区域
    
            jp1 = new JPanel();
    
            jb1 = new JButton(new ImageIcon("images\login.png"));
    
            jb2 = new JButton(new ImageIcon("images\delete.png"));
    
            jb3 = new JButton(new ImageIcon("images\register.png"));
    
            // 中部区域
    
            jtp = new JTabbedPane();
    
            jp2 = new JPanel();
    
            jp3 = new JPanel();
    
            jp3.setBackground(Color.RED);// 给面板设置背景
    
            jp4 = new JPanel();
    
            jp4.setBackground(new Color(0, 0, 255));
    
            // 将面板添加到选项卡窗格上
    
            jtp.add("QQ号码", jp2);// 参数:选项卡名称,面板
    
            jtp.add("手机号码", jp3);
    
            jtp.add("电子邮箱", jp4);
    
            // 设置布局
    
            jp2.setLayout(new GridLayout(3, 3));
    
            // 添加组件
    
            jp1.add(jb1);
    
            jp1.add(jb2);
    
            jp1.add(jb3);
    
            jp2.add(jl2);
    
            jp2.add(jtf);
    
            jp2.add(jb4);
    
            jp2.add(jl3);
    
            jp2.add(jpf);
    
            jp2.add(jl4);
    
            jp2.add(jcb1);
    
            jp2.add(jcb2);
    
            jp2.add(jl5);
    
            this.add(jp1, BorderLayout.SOUTH);
    
            this.add(jl1, BorderLayout.NORTH);
    
            this.add(jtp, BorderLayout.CENTER);
    
            // 展示组件
    
            ImageIcon icon = new ImageIcon("images\qq.png");
    
            this.setIconImage(icon.getImage());// 给窗体设置图标方法
    
            this.setSize(400, 380);
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

    代码实例9:

     

    package com.zhouzhou;
    
    //记事本界面
    
    import java.awt.*;
    
    import javax.swing.*;
    
    import java.awt.event.*;
    
    public class Demo17 extends JFrame {
    
        // 工具条
    
        JToolBar jtb;
    
        JButton jb1, jb2, jb3, jb4, jb5, jb6;
    
        // 菜单条组件
    
        JMenuBar jmb;
    
        JMenu menu1, menu2, menu3, menu4, menu5;
    
        JMenuItem item2, item3, item4, item5, item6, item7;
    
        JMenu xinjian;// 二级菜单
    
        JMenuItem file, project;
    
        JTextArea jta;
    
        public static void main(String[] args) {
    
            // TODO Auto-generated method stub
    
            new Demo17();
    
        }
    
        public Demo17() {
    
            // 创建工具条
    
            jtb = new JToolBar();
    
            jb1 = new JButton(new ImageIcon("images\11.png"));
    
            jb1.setToolTipText("新建");
    
            jb2 = new JButton(new ImageIcon("images\22.png"));
    
            jb2.setToolTipText("打开");
    
            jb3 = new JButton(new ImageIcon("images\33.png"));
    
            jb3.setToolTipText("等待");
    
            jb4 = new JButton(new ImageIcon("images\44.png"));
    
            jb4.setToolTipText("统计");
    
            jb5 = new JButton(new ImageIcon("images\55.png"));
    
            jb5.setToolTipText("参与");
    
            jb6 = new JButton(new ImageIcon("images\66.png"));
    
            jb6.setToolTipText("旁观");
    
            jmb = new JMenuBar();
    
            menu1 = new JMenu("文件(F)");
    
            menu1.setMnemonic('F');// 设置助记符
    
            menu2 = new JMenu("编辑(E)");
    
            menu2.setMnemonic('E');
    
            menu3 = new JMenu("格式(O)");
    
            menu3.setMnemonic('O');
    
            menu4 = new JMenu("查看(V)");
    
            menu4.setMnemonic('V');
    
            menu5 = new JMenu("帮助(H)");
    
            menu5.setMnemonic('H');
    
            // item1=new JMenuItem(“新建”)
    
            xinjian = new JMenu("新建");
    
            file = new JMenuItem("文件");
    
            project = new JMenuItem("工程");
    
            item2 = new JMenuItem("打开", new ImageIcon("images\77.png"));
    
            item3 = new JMenuItem("保存(S)");
    
            item3.setMnemonic('S');
    
            // 给菜单选项添加快捷方式
    
            item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
    
                    InputEvent.ALT_MASK));
    
            item4 = new JMenuItem("另存为");
    
            item5 = new JMenuItem("页面设置");
    
            item6 = new JMenuItem("打印");
    
            item7 = new JMenuItem("退出");
    
            jta = new JTextArea();
    
            // 设置布局
    
            // 添加组件
    
            // 将按钮添加到工具条上
    
            jtb.add(jb1);
    
            jtb.add(jb2);
    
            jtb.add(jb3);
    
            jtb.add(jb4);
    
            jtb.add(jb5);
    
            jtb.add(jb6);
    
            // 将菜单添加到菜单栏上
    
            xinjian.add(file);
    
            xinjian.add(project);
    
            menu1.add(xinjian);
    
            menu1.add(item2);
    
            menu1.add(item3);
    
            menu1.add(item4);
    
            menu1.addSeparator();// 添加分割线
    
            menu1.add(item5);
    
            menu1.add(item6);
    
            menu1.addSeparator();
    
            menu1.add(item7);
    
            // 将菜单添加到菜单条上
    
            jmb.add(menu1);
    
            jmb.add(menu2);
    
            jmb.add(menu3);
    
            jmb.add(menu4);
    
            jmb.add(menu5);
    
            // 将菜单添加到窗体上
    
            this.setJMenuBar(jmb);
    
            // 将工具条添加到窗体
    
            this.add(jtb, BorderLayout.NORTH);
    
            JScrollPane jsp = new JScrollPane(jta);
    
            jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    
            this.add(jsp);
    
            // 展示
    
            this.setTitle("记事本");
    
            ImageIcon icon = new ImageIcon("images\jsb.png");
    
            this.setIconImage(icon.getImage());
    
            this.setSize(1200, 900);
    
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            this.setVisible(true);
    
        }
    
    }

     

     


    转载:https://www.cnblogs.com/1693977889zz/p/8377461.html

    推荐内容:
    java主线程结束和子线程结束之间的关系
    Java面试题总结-Day1
    金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
    java后台导出excel代码详细讲解
    java 一次CPU占用过高问题的排查及解决
    JAVA实现用户的权限管理
    Java中简单Http请求
    Java面试题—初级(2)
    JAVA面试题(8)
    Java面试集合(四)

     

    展开全文
    agoodcoder777 2019-04-27 19:13:01
  • 5星
    3.1MB lixiaolei5798 2018-08-07 17:44:40
  • 3星
    626KB qimu502589620 2015-10-13 15:06:41
  • // 方法一: 通过 java.awt.Toolkit 工具类来读取本地、网络 或 内存中 的 图片(支持 GIF、JPEG 或 PNG) Image image = Toolkit.getDefaultToolkit().getImage(String filename); Image image = Toolkit....

    1.使用JLabel组件来显示图片

    JLabel 的构造方法:

    JLabel()
    
    JLabel(String text) 
    
    JLabel(String text, int horizontalAlignment) 
    
    JLabel(Icon image) 
    
    JLabel(Icon image, int horizontalAlignment) 
    
    JLabel(String text, Icon image, int horizontalAlignment) 
    
    /**
     * text:显示的文本
     * image:显示的图片
     * horizontalAlignment: 标签内容(在标签内)的水平对其方式(竖直方向默认居中, 可通过方法设置)
     * 
     */
    
    

    使用Icon实例获取图片资源,一般用ImageIcon来穿建图片对象。

    ImageIcon icon = new ImageIcon("src/main/resources/title.jpeg");

    其他实例创建的方法:

    // 方法一: 通过 java.awt.Toolkit 工具类来读取本地、网络 或 内存中 的 图片(支持 GIF、JPEG 或 PNG)
    Image image = Toolkit.getDefaultToolkit().getImage(String filename);
    Image image = Toolkit.getDefaultToolkit().getImage(URL url);
    Image image = Toolkit.getDefaultToolkit().createImage(byte[] imageData);
    
    // 方法二: 通过 javax.imageio.ImageIO 工具类读取本地、网络 或 内存中 的 图片(BufferedImage 继承自 Image)
    BufferedImage bufImage = ImageIO.read(File input);
    BufferedImage bufImage = ImageIO.read(URL input);
    BufferedImage bufImage = ImageIO.read(InputStream input);
    
    /*
     * PS_01: 图片宽高: BufferedImage 可以通过 bufImage.getWidth() 和 bufImage.getHeight() 方法直接获取图片的宽高;
     *                 Image 获取宽高需要另外传入一个 ImageObserver 参数。
     *
     * PS_02: 图片裁剪: BufferedImage 通过 bufImage.getSubimage(int x, int y, int w, int h) 方法可以截取图片的
     *                 任意一部分,返回一个新的 BufferedImage 实例。
     *
     * PS_03: 图片缩放: Image 通过 image.getScaledInstance(int width, int height, int hints) 方法可以对图片进行
     *                 缩放,返回新的一个 Image 实例。
     */
    

    设置图片大小:

    icon.setImage(icon.getImage().getScaledInstance(width,height,Image.SCALE_DEFAULT));

    图像部分代码:

            JPanel titlePanel = new JPanel();
            ImageIcon icon = new ImageIcon("src/main/resources/title.jpeg");
            JLabel titleLabel = new JLabel();
            titlePanel.setBounds(0,0,800,500);
            icon.setImage(icon.getImage().getScaledInstance(titlePanel.getWidth(),titlePanel.getHeight(),Image.SCALE_DEFAULT));//设置图像大小
            titleLabel.setIcon(icon);
            titlePanel.add(titleLabel);
            this.add(titlePanel,BorderLayout.NORTH);

    效果图:

    PS:附免费图片资源网站:https://www.pexels.com/zh-cn/

    参考:https://blog.csdn.net/xietansheng/article/details/72814492

     

     

    展开全文
    z807144368 2020-02-04 19:44:44
  • 213KB m0_52957036 2020-11-07 10:00:48
  • 5星
    868KB ls6688 2018-07-17 16:07:16
  • 一、Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构,现在就...

    转自 liujun13579的专栏 的博客

    一、Java图形化界面设计——容器(JFrame)

    程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构,现在就进入java图形化界面编程。

     

    一、Java基本类(JFC)

    Java基本类(“Java FoundationClasses”,JFC),由一些软件包组成。这些软件包主要包括下面一些应用程序接口(API):
      ·抽象窗口工具集(AWT)(1.1及以上版本)。
      ·Swing构件。
      ·Java 2D应用程序接口(2D API)。
      ·兼容程序接口。
      上面列出的这些应用程序接口可难会出现在多个软件包中。例如:2D API在Java.awt和Java.awt.image软件包中都存在,虽然像Java.awt.geom等一些特殊的软件包也支持2DAPI,但是大量的2D API类都存在于Java.awt软件包中。
      AWT(1.1及以上版本)是JFC的核心。AWT为JFC的构成提供了以下基本结构:
      ·代理事件模型。
      ·轻量构件。
      ·剪贴板和数据传输。
      ·打印和无鼠标操作。

     

    1、AWTAbstract Window Toolkit(AWT)抽象窗口工具包

     

    AWT是比较旧的双介面函式库,它依然高度倚赖各作业平台自身所具备的绘图功效机能,且用一个比包容程式(Wrapper)还小的设计还去除、吸收各作业平台间的绘图功能机能差异,以致Java程式在跨平台移携后的绘图呈现不够一致,这使得AWT遭受到众多的批评。这意味着:AWT的Widget倚赖作业平台自身原有的Widget功效机能,程式设计师在开发撰写时必须去了解各作业平台在Widget方面的差异性,如此便偏离了Java程式语言最初的宗旨:跨平台一致性。

    AWT由java.awt包提供,其提供了支持GUI设计的类和接口,而又AWT提供的组建一般称之为重量级组件,其是由本地方法来实现其功能的。AWT的特点:

    AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系

    AWT 通过牺牲功能来实现其平台无关性

    AWT不能满足图形化用户界面发展的需要

     

    2、Swing包

    为了解决AWT组件的缺陷,特别是跨平台的问题,在JDK1.2版本后提供了新的Swing包,有javax.swing提供,Swing是在AWT的基础上构建的一套新的图形界面组件,所有组建均是由java书写,具有良好的跨平台性,由于Swing没有使用本地方法实现图形功能,因此提出把Swing组件称之为轻量级组件。

    注意:Swing组建是在AWT基础上建立的,而不是替代AWT的,AWT是根基,Swing是发展。

    Swing组件几乎都是轻量组件,那些顶层容器:窗体,小应用程序、窗口和对话框除外。因为轻量组件是在其容器的窗口中绘制的,而不是在自己的窗口中绘制的,所以轻量组件最终必须包含在一个重量容器中。因此,Swing的窗体、小应用程序、窗口和对话框都必须是重量组件,以便提供一个可以在其绘制Swing轻量组件的窗口。

     

    Swing包括250多个类,其中有些是UI组件,有些是支持类。为了把UI组件和支持类区分开,Swing组件的名字以J开头。表1-1列出了Swing提供的J组件。用斜体字表示的组件是AWT组件的替代组件。

     

    表1-1 Swing UI组件
      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      组件类         描述
      ─────────────────────────────────
      JApplet Java.applet.Applet类的扩展,它含有JRootPane的一个实例
      JButton 能显示文本和图形的按钮,它是AWT按钮组件的替代组件
      JCheckBox 能显示文本和图形的复选框,它是AWT选择组件的替代组件
      JCheckBoxMenuItem 一个复选框菜单项,它是AWT的复选框菜单项组件的替代组件
      JComboBox 带下拉列表的文本框,它是AWT选择组件的替代组件
      JComponent 所有轻量J组件的基类
      JDesktopPane 内部窗体的容器
      JDialog Swing对话框的基类,它扩展了AWT Dialot类
      JEditorPane 用于编辑文本的文本窗格
      JFrame 扩展java.awt.Frame的外部窗体
      JInternalFrame 在JDesktopPane中出现的内部窗体
      JLabel 可显示文本和图标的标签,它是AWT标签组件的替代组件
      JLayeredPane 能够在不同层上显示组件的容器
      JList 显示选项列表的组件,它是AWT列表组件的替代组件
      JMenu 菜单条中显示的一个菜单,它是AWT菜单组件的替代组件
      JMenuBar 用于显示菜单的菜单条,它是AWT菜单条组件的替代组件
      JMenuItem 菜单项,它是AWT菜单项组件的替代组件
      JOptionPane 显示标准的对话框,如:消息和问题对话框
      JPanel 通用容器,它是AWT面板和画布组件的替代组件
      JPasswordfield JTextField的扩展,使输入的字符不可见
      JPopupMenu 弹出式菜单,它是AWT弹出式菜单组件的替代组件
      JProgressBar 进度指示器
      JRadioButton 单选按钮,它是AWT复选框组件的替代组件
      JRootPane 顶层容器,它包含一个玻璃窗格,一个层窗格,一个内容窗格和一个可选的菜单条
      JScrollBar 滚动条,它是AWT滚动条组件的替代组件
      JScrollPane 滚动窗格,它是AWT滚动窗格组件的替代组件
      JSeparator 水平或垂直分隔条
      JSlider 滑杆
      JSplitPane 有两个分隔区的容器,这两个分隔区可以水平排列或者垂直排列且分隔区的大小能自动调整
      JTabbedPane 带选项卡的窗格
      JTable 表格
      JTableHeader 表格头
      JTextArea 用于输入多行文本的文本域,它是AWT文本域组件的替代组件
      JTestComponent 文本组件的基类,它替代AWT的TextComponent类
      JTextField 单行文本域,它替代AWT的单行文本域组件
      JTextPane 简单的文本编辑器
      JToggleButton 两种状态的按钮,它是JCheckBox和JRadioButton组件的基类
      JToolBar 工具条
      JToolTip 当光标停留在一个组件上时,该组件上显示的一行文字
      JTree 用于按钮层次组织数据的结构控件
      JViesport 用于浏览可滚动组件的视口
      JWindow 外部窗口,它是java.awt.Window的扩展
      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      注:斜体字表示的是AWT的替代组件

     

    二、AWT和Swing的区别

             AWT是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT  不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。

     

    Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。例如说并不是所有的操作系统都提供了对树形控件的支持, Swing 利用了AWT 中所提供的基本作图方法对树形控件进行模拟。由于 Swing 控件是用100%的Java代码来实现的,因此在一个平台上设计的树形控件可以在其他平台上使用。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。

     

    AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。对于一个嵌入式应用来说,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT 当然成了嵌入式Java的第一选择。而在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素,所以在标准版的Java中则提倡使用Swing,也就是通过牺牲速度来实现应用程序的功能。

     

    简要的讲:

    AWT 是抽象窗口组件工具包,是 java 最早的用于编写图形节目应用程序的开发包。

    Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。

     

     

    三、Swing基本框架


    上图列举了AWT和 Swing的关系,也可以看出Swing是继承自AWT的。本文主要利用Swing来设计图形化界面程序。

     

    四、图形化设计步骤

     

    图形化界面程序大家都使用过,一般使用一个程序过程是:打开一个程序出现一个窗口或对话框,其中一般有菜单、工具栏、文本框、按钮、单选框、复选框等控件(组件也就是控件),用户录入相关数据,点按相关菜单、按钮,程序对数据进行相关处理,并将处理后的数据显示或者保存起来,最后关闭程序。

    用java编程的相关设计步骤来分解上面的的程序运行过程如下图所示:

     

    1、  创建顶层容器

    对应于程序的初始显现窗口,窗口中放入其它菜单、工具栏、文本框、按钮等组件

    顶层容器图形化界面显示的基础,其它所有的组件(控件)都是直接或间接显示在顶层容器中的。在java中顶层容器有三种,分别是JFrame(框架窗口,即通常的窗口)、JDialog(对话框)、JApplet(用于设计嵌入在网页中的java小程序)。

    2、  创建中间容器、组件

    对应于程序中出现的菜单、工具栏(中间容器)、文本框、按钮、单选框、复选框等控件。

    有很多Swing组件可以使用,见前面的Swing UI组件表。

    3、  将组件加入容器

    在java中创建组件后,还需要将组件放入相应的容器,才能在顶层容器,如窗口中显示出组件。

    4、  设置容器内组件的位置

    组件添加到容器中,还必须设置好组件的显示位置,一般有两种方法来设置组建的显示位置,一是按照与容器的相对距离(以像素为单位),精确固定控件的位置;二是用布局管理器来管理组件在容器内的位置。

    5、  处理组件所产生的事件

    即用户执行选择菜单、单击按钮等操作时,就要执行相应的命令,进行相关的程序处理,这就需要设置组件的事件。

     

    五、组件容器的使用

    Java中组件容器包含顶层容器和中间容器。

    在java中顶层容器有三种,分别是JFrame(框架窗口,即通常的窗口)、JDialog(对话框)、JApplet(用于设计嵌入在网页中的java小程序),顶层容器是容纳其它组件的基础,即设计图形化程序必须要有顶层容器。

     

    Java中间容器是可以包含其它相应组件的容器,但是中间容器和组件一样,不能单独存在,必须依附于顶层容器。

    常见的中间容器有:

    •    JPanel:最灵活、最常用的中间容器。

    •    JScrollPane:与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。

    •    JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。

    •    JToolBar:按行或列排列一组组件(通常是按钮)。

     

    1、JFrame 框架窗口的使用



             以上是JFrame的常用方法即说明,下面举例说明。

     

    实例1:直接定义Jframe 类的对象创建一个窗口

    // JFrameDemo1.java

    import javax.swing.*;     //使用Swing类,必须引入Swing包

    public class JFrameDemo1{

      public staticvoid main( String args[]) {

             //定义一个窗体对象f,窗体名称为"一个简单窗口"        

             Jframe  f = new JFrame("一个简单窗口");

             /*设置窗体左上角与显示屏左上角的坐标,

    离显示屏上边缘300像素,离显示屏左边缘300像素     */

             f.setLocation(300, 300);           //f.setLocationRelativeTo(null);本语句实现窗口居屏幕中央

             f.setSize(300,200);            //设置窗体的大小为300*200像素大小

             f.setResizable(false);       //设置窗体是否可以调整大小,参数为布尔值

             //设置窗体可见,没有该语句,窗体将不可见,此语句必须有,否则没有界面就没有如何意义了

    f.setVisible( true);   

    //用户单击窗口的关闭按钮时程序执行的操作

             f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);

     }

    }

     

    程序运行结果如下图所示:

    可以根据程序代码的注释,依次修改相应的方法参数查看效果。

    setDefaultCloseOperation(int operation):设置用户在此窗体上发起 "close" 时默认执行的操作。方法中的参数解释如下:

    l  为“0”或DO_NOTHING_ON_CLOSE:

    (在 WindowConstants 中定义):不执行任何操作;要求程序在已注册的WindowListener 对象的 windowClosing 方法中处理该操作。

    比如实例程序代码中更改为f.setDefaultCloseOperation(f. DO_NOTHING_ON_CLOSE);或者f.setDefaultCloseOperation(0),然后查看效果,可以发现窗口无法关闭,下面是相同用法,不再解释了。

    l  为“1”或HIDE_ON_CLOSE

    调用任意已注册的 WindowListener 对象后自动隐藏该窗体。此时没有关闭程序,只是将程序界面隐藏了。

    可以打开任务管理器,可以看到一个叫“java.exe”的进程(如果调试运行了多个java程序,则会看到多个“java.exe”的进程),如果此时用EditPlus测试程序,会发现当单击窗口的关闭按钮关闭窗口后,却无法再次对程序进行调试,因为程序线程没有关闭,在任务管理器中关闭java.exe(如果有多个“java.exe”的进程,则先都关闭掉,再来测试该问题)基础后,EditPlus才可以重新编译改程序。

    l  为“2”或DISPOSE_ON_CLOSE

    调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体。但继续运行应用程序,释放了窗体中占用的资源。

    l  为“3”EXIT_ON_CLOSE(在 JFrame 中定义):使用 System exit 方法退出应用程序。仅在应用程序中使用。结束了应用程序。

     

    默认情况下,该值被设置为 HIDE_ON_CLOSE。

    当注释掉实例中的f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);语句时,起到的效果和f.setDefaultCloseOperation(f. HIDE_ON_CLOSE); 或者f.setDefaultCloseOperation(1);一样。

     

    实例2:创建类继承JFrame类创建一个窗口

     

    // JFrameDemo2.java

    importjavax.swing.*;     

    //创建子类MyFrame继承父类JFrame

    class MyFrameextends JFrame{

    //定义构造函数,带有四个参数,用于设置窗口位置和大小

      MyFrame(int x,int y,int h,int w){

         super("一个简单窗口");       //重写父类方法,为窗口定义标题

        /*以下的方法调用前面没有添加对象名,也不可能添加,要创建的对象名称是什么都不知道,也就不可能添加。但是创建对象后,对象自动获取这些初始值。*/

    setLocation(x,y);

         setSize(h,w);

         setResizable(false);

         setVisible(true);

         setDefaultCloseOperation(EXIT_ON_CLOSE);

       }

    }

    publicclass  JFrameDemo2{

      public static void main( String args[]) {

             //实例化类对象,提示设置参数

             MyFrame f = new MyFrame(300,300,300,200);

      }

    }

     

    上面的例子也可以不使用构造函数,可以和实例一方式一样,代码可以改为如下模式。

    实例3:一个简单窗口

    // JframeDemo3.java

    importjavax.swing.*;              

    class MyFrameextends JFrame{

      MyFrame(){

       }

    }

    publicclass  JframeDemo3{

      public static void main( String args[]) {

             MyFrame f = new MyFrame();

             f.setTitle("一个简单窗口");

             f.setLocationRelativeTo(null);

             f.setSize(300,200);

             f.setResizable(false);

             f.setVisible( true);

             f.setDefaultCloseOperation(3);

      }

    }

     

     

    展开全文
    u012349402 2015-03-25 21:21:07
  • 5星
    843KB qq_38663729 2017-07-18 13:12:18
  • 141KB xushunhuasky 2012-03-05 13:06:14
  • 82KB weixin_38504170 2020-09-03 15:47:08
  • 36KB weixin_42292939 2018-05-23 17:47:58
  • 2.83MB xuhang199506 2018-03-13 14:18:08
  • 11KB wuque12138 2017-12-10 12:23:16
  • 4星
    2KB xinyizui 2013-11-03 19:01:43
  • 23KB qq_42815188 2020-10-14 15:13:42
  • 717KB chen232001 2018-10-05 20:32:42
  • 78B susunjia 2021-02-05 12:49:22
  • 5星
    560KB m0_52957036 2020-01-17 11:59:30
  • 4星
    601KB maxniu1089 2007-05-15 11:10:25
  • 266KB m0_51004854 2021-11-17 10:01:14
  • 12KB qq_38701478 2018-03-24 17:38:40
  • 53KB m0_52957036 2020-12-04 18:45:06
  • changjiale110 2017-12-20 17:24:19
  • 9KB qq_42249552 2018-05-20 17:48:55

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 181,920
精华内容 72,768
关键字:

java图形化界面设计

java 订阅