摘要:本文讲解了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,3,15,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不显示 } }