zoukankan      html  css  js  c++  java
  • 【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不显示
      
      }
      }

  • 相关阅读:
    关于WM_CTLCOLOREDIT的处理的一些问题
    Duilib非官方更新贴~
    一个非常简单的返回局部字符数组的C语言程序, 请问其输出结果?
    更改Windows控制台默认缓冲区行数和宽度
    最新版Duilib在VS2012下编译错误的解决方法
    记C语言浮点数运算处理 "坑" 一则
    修改stb_image.c以让Duilib直接支持Ico格式的图标显示
    一个通过网络转换Ico到Png图片的小小程序(Ico2Png)
    编程调节Win7/Win8系统音量的一种方法
    分享一个最近研究的手机QQ3.0的协议(版本1.4)
  • 原文地址:https://www.cnblogs.com/yczha/p/13160277.html
Copyright © 2011-2022 走看看