【Java】Java图形化用户界面-GUI

摘要:本文讲解了Java基础中的图形用户界面的主要实现,包括:布局管理器、容器等内容

一、布局
1.组件
  • 以图形化的方式显示在屏幕上的,和用户进行交互的对象,就叫做组件
  • 组件包括:菜单、标签、文本框、密码框、滚动条、单选、复选、按钮等
2.容器
  • 组件不能独立的显示出来,只能将组件放在容器里,才能正常的显示
  • 将组件合理有序的排列和分布在容器中(包括组件的位置大小)成为布局
二、布局管理器

每个容器都有自己的布局管理器,当某个容器内的组件需要改变其属性时,就需要调用

其组件所在容器的布局管理器。Awt中常见的布局管理器有:

BoederLayout FlowLayout GridLayout

  • Frame容器

    • 首先引入包:java.awt.* javax.swing.*
    //基本用法
    JFrame aa=new JFrame();
    aa.setTitle("用户界面");//设置用户界面
    aa.setResizable(false);//设置窗体大小是否可调整
    aa.setSize(350,300);//设置窗口大小,数字代表像素
    aa.setLocation(100,260);//设置窗体位置
    aa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭进程
    aa.setVisible(true);//true 显示,false不显示
    //注:一般的,为简单计,将JFrame继承在主类中,然后将其余内容放入一个新类里
    public 主类 extends JFrame
    //JButton按钮组件
    JButton bu1=new JButton();
    bu1.setText("Button");
    aa.add(bu1);
  • 边界布局管理器

    //一般用法
    this.add(bu1,BorderLayout.EAST);
    this.add(bu2,BorderLayout.WEST);
    this.add(bu3,BorderLayout.SOUTH);
    this.add(bu4,BorderLayout.NORTH);
    this.add(bu5,BorderLayout.CENTER);
    //没有四个方位中的任一个将会以中部为主进行扩充
    //边界布局管理器是默认的,可不设置
  • 流式布局管理器

    this.setLayout(new FlowLayout(FlowLayout.LEFT));//添加流式布局管理器,括号中属性设置对齐方式
  • 网格布局管理器

    this.setLayout(new GridLayout(2,315,15));//添加网格布局管理器,括号中代表2行3列,空格部分为行向15像素,列向15像素
  • JPanl面板

    //一般用法
    pan1=new JPanel();//JPanel默认是流式布局
    pan2=new JPanel();
    pan1.add(bu1);pan1.add(bu2);
    pan2.add(bu3);pan2.add(bu4);pan2.add(bu5);
  • 文本框和标签

    JLabel lab1,lab2;//标签
    JTextField tex;//文本框
    JPasswordField pas;//密码框
    lab1=new JLabel("Name ");
    lab2=new JLabel("Password");
    tex=new JTextField(10);
    pas=new JPasswordField(10);
  • 单选框和复选框

    JCheckBox che1,che2,che3;//复选框
    JRadioButton rad1,rad2;//单选框
    ButtonGroup bug;//单选按钮放入一个组里,只能选择其一
    che1=new JCheckBox("music");
    che2=new JCheckBox("art");
    che3=new JCheckBox("P.E");
    rad1=new JRadioButton("man");
    rad2=new JRadioButton("woman");
    bug=new ButtonGroup();
    bug.add(rad1);bug.add(rad2);
  • 下拉列表和滚动条

    JList lis;//列表
    JComboBox cob;//下拉框
    JScrollPane scp;//滚动作用
    String list[]={"gaozhong","benke","dazhuan","shuoshi","yanjiusheng","boshi"};
    lis=new JList(list);
    lis.setVisibleRowCount(3);
    scp=new JScrollPane(lis);
    String comb[]={"Beijing","Tianjin","Shanghai","Guangzhou","Sichuan","Chongqing"};
    cob=new JComboBox();
  • 拆分窗口

    JSplitPane sp;//拆分面板
    sp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,lis,lab1);//拆分面板,左右型
    sp.setOneTouchExpandable(true);//添加拆分作用
    this.add(sp);
  • 练习

    //练习代码
    package cha05;
    import java.awt.*;
    import javax.swing.*;
    
    public class L5_1 extends JFrame
    {
    JPanel pan1,pan2,pan3;//面板
    JButton bu1,bu2,bu3,bu4,bu5;//按钮
    JLabel lab1,lab2;//标签
    JTextField tex;//文本框
    JPasswordField pas;//密码框
    JCheckBox che1,che2,che3;//复选框
    JRadioButton rad1,rad2;//单选框
    ButtonGroup bug;//单选按钮放入一个组里,只能选择其一
    JList lis;//列表
    JComboBox cob;//下拉框
    JScrollPane scp;//滚动作用
    JSplitPane sp;//拆分面板
    
    public static void main(String[] args)
    {
    L51 l51=new L5_1();
    }
    public L5_1()
    {
    pan1=new JPanel();//JPanel默认是流式布局
    pan2=new JPanel();
    pan3=new JPanel();
    bu1=new JButton("Cancel");
    bu2=new JButton("Login");
    bu3=new JButton("South");
    bu4=new JButton("North");
    bu5=new JButton("Center");
    
    lab1=new JLabel(new ImageIcon("image/光绘1.jpg"));
    lab2=new JLabel("学历");
    
    tex=new JTextField(10);
    
    pas=new JPasswordField(10);
    
    che1=new JCheckBox("music");
    che2=new JCheckBox("art");
    che3=new JCheckBox("P.E");
    
    rad1=new JRadioButton("man");
    rad2=new JRadioButton("woman");
    
    bug=new ButtonGroup();
    bug.add(rad1);bug.add(rad2);
    
    String list[]={"gaozhong","benke","dazhuan","shuoshi","yanjiusheng","boshi"};
    lis=new JList(list);
    //lis.setVisibleRowCount(3);
    //scp=new JScrollPane(lis);
    sp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,lis,lab1);//拆分面板,左右型
    
    sp.setOneTouchExpandable(true);//添加拆分作用
    
    String comb[]={"Beijing","Tianjin","Shanghai","Guangzhou","Sichuan","Chongqing"};
    cob=new JComboBox(comb);
    
    //pan1.add(lab1); pan1.add(cob);// pan1.add(che2);pan1.add(che3);
    //pan2.add(lab2); pan2.add(scp); //pan2.add(rad2);
    //pan3.add(bu1); pan3.add(bu2);
    
    //边界布局管理器,默认添加
    //this.add(bu1,BorderLayout.EAST);
    //this.add(bu2,BorderLayout.WEST);
    //this.add(bu3,BorderLayout.SOUTH);
    //this.add(bu4,BorderLayout.NORTH);
    //this.add(bu5,BorderLayout.CENTER);
    
    //流式布局管理器
    //this.setLayout(new FlowLayout(FlowLayout.LEFT));//添加流式布局管理器
    
    //网格布局管理器
    //this.setLayout(new GridLayout(2,1,0,0));//添加网格布局管理器,括号中代表2行3列,空格部分为15像素,列向15像素
    
    //this.add(bu1);
    //this.add(bu2);
    //this.add(bu3);
    //this.add(bu4);
    //this.add(bu5);
    
    
    this.add(sp);
    //this.add(pan1);
    //this.add(pan2);
    //this.add(pan3);
    
    this.setTitle("Layout");//设置用户界面
    this.setSize(230,150);//设置窗口大小,数字代表像素
    this.setLocation(300,260);//设置窗体位置
    this.setResizable(false);//设置窗体大小是否可调整
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭进程
    this.setVisible(true);//true 显示,false不显示
    
    }
    }
  • 聊天窗口

    //实现代码
    package cha05;
    import java.awt.*;
    import javax.swing.*;
    public class L5_2 extends JFrame
    {
    JTextArea tea;//文本域
    JPanel pan;
    JComboBox cob;
    JButton but;
    JTextField tex;
    JScrollPane scr;
    public static void main(String[] args)
    {
    L52 l52=new L5_2();
    }
    
    L5_2()
    {
    tea=new JTextArea();
    pan=new JPanel();
    String comb[]={"wukong","bajie","shasen","tangsen"};
    cob=new JComboBox(comb);
    tex=new JTextField(10);
    but=new JButton("Senting");
    scr=new JScrollPane(tea);
    
    pan.add(cob);pan.add(but);
    
    this.setLayout(new GridLayout(2,1,0,0));
    
    this.add(scr);
    this.add(pan);
    
    this.setTitle("Layout");//设置用户界面
    this.setSize(230,150);//设置窗口大小,数字代表像素
    this.setLocation(300,260);//设置窗体位置
    this.setResizable(false);//设置窗体大小是否可调整 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭进程
    this.setVisible(true);//true 显示,false不显示
    
    }
    }
  • 用户登录界面

    //实现代码
    package cha05;
    import java.awt.*;
    import javax.swing.*;
    public class L5_3 extends JFrame
    {
    JLabel lab1;//north
    JButton but1,but2,but3;//south
    JPanel pan1;
    JTabbedPane tap;//center,选项卡
    JPanel pan2,pan3,pan4;
    JLabel lab2,lab3,lab4,lab5;
    JTextField tex;
    JPasswordField pas;
    JButton but4;
    JCheckBox che1,che2;
    public static void main(String[] args)
    {
    L53 l53=new L5_3();
    }
    
    L5_3()
    {
    lab2=new JLabel("QQ_number",JLabel.CENTER);
    lab3=new JLabel("QQ_password",JLabel.CENTER);
    lab4=new JLabel("Forgetpassword",JLabel.CENTER);
    lab4.setFont(new Font("宋体",Font.PLAIN,16));
    lab4.setForeground(Color.BLUE);
    lab5=new JLabel("申请密码保护");//设置链接
    lab5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//链接时图标变形
    
    tex=new JTextField(10);
    pas=new JPasswordField(10);
    but4=new JButton("delete");
    
    lab1=new JLabel("QQ");//north
    pan1=new JPanel();//south
    but1=new JButton("button1");
    but2=new JButton("button2");
    but3=new JButton("button3");
    
    che1=new JCheckBox("影身登录");
    che2=new JCheckBox("记住密码");
    
    tap=new JTabbedPane();//选项卡
    pan2=new JPanel();
    pan3=new JPanel();
    pan3.setBackground(Color.BLUE);
    pan4=new JPanel();
    pan4.setBackground(Color.GREEN);
    
    tap.add("普通用户", pan2);
    tap.add("QQ会员",pan3);
    tap.add("管理员",pan4);
    
    this.setLayout(new GridLayout(3,3));
    
    pan1.add(but1);
    pan1.add(but2);
    pan1.add(but3);
    pan2.add(lab2);
    pan2.add(tex);
    pan2.add(but4);
    pan2.add(lab3);
    pan2.add(pas);
    pan2.add(lab4);
    pan2.add(che1);
    pan2.add(che2);
    pan2.add(lab5);
    
    this.add(pan1,BorderLayout.SOUTH);
    this.add(lab1, BorderLayout.NORTH);
    this.add(tap,BorderLayout.CENTER);
    
    ImageIcon tp1=new ImageIcon("image/光绘1.jpg");
    this.setIconImage(tp1.getImage());
    this.setTitle("Layout");//设置用户界面
    this.setSize(340,400);//设置窗口大小,数字代表像素
    this.setLocation(300,260);//设置窗体位置
    this.setResizable(false);//设置窗体大小是否可调整
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭进程
    this.setVisible(true);//true 显示,false不显示
    
    }
    }

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoz.cool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值