目录
1.概述
JavaSwing组件之间的继承关系图:
各个组件的作用:
2.常用的窗体
2.1JFrame
JFrame是一个容器,他是各个组件的载体。
新建JFrame对象:
设置JFrame的大小:
设定JFrame的关闭方式:
package com.pikaqiu.gui;
import javax.swing.*;
public class Demo1 {
public static void main(String[] args) {
JFrame jf = new JFrame("hello"); //初始化一个窗口
// jf.setSize(400,250); //设置窗口大小
// jf.setLocation(400,300); //设置窗口出现的位置
jf.setBounds(400,300,400,250); //设置窗口出现的位置和大小
jf.setVisible(true); //显示窗口
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //默认关闭方式
}
}
2.2JDialog
他是从一个窗体弹出来的另一个窗体,他和JFrame类似,需要调用getContentPane将窗体转换为容器,然后在容器中设置窗体内容。
注意:JDialog可以当成JFrame使用,但必须从属于JFrame
JDialog的构造函数:
package com.pikaqiu.gui;
import javax.swing.*;
public class Demo2 {
public static void main(String[] args) {
JFrame jf = new JFrame("JFrame");
jf.setBounds(400,300,400,280);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JDialog jd = new JDialog(jf,"Dialog");
jd.setBounds(400,300,300,180);
jd.setVisible(true);
jd.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); //JDialog常用的关闭窗口方式
}
}
3.常用的面板
3.1JPanel
JPanel就是一种最简单的面板,继承自java.awt.Container类。
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo3 {
public static void main(String[] args) {
//设置一个窗口
JFrame jf = new JFrame("Frame");
jf.setBounds(400,300,1000,500);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置两个按钮
JButton jb1 = new JButton("按钮一");
JButton jb2 = new JButton("按钮二");
//设置一个面板
JPanel jp = new JPanel(new FlowLayout());
//添加按钮
jp.add(jb1);
jp.add(jb2);
//将面板添加入窗口中去
jf.add(jp);
}
}
3.2JScrollPane
JScrollPane是带滚动条的面板。因此,在碰到需要将一个大的组件放到一个较小的空间的时候,使用该面板。JScrollPane内只能添加一个组件;因此,如果需要将多个组件添加到JScrollPane中时,需要先将需要添加的组件添加到JPanel中,再将JPanel添加到JScrollPane中。
package com.pikaqiu.gui;
import javax.swing.*;
public class Demo4 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setBounds(400,300,1200,500);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton jb = new JButton("香蕉");
JScrollPane jp = new JScrollPane(jb);
jf.add(jp);
}
}
4.常用的组件
4.1标签组件
类:JLable
作用:显示文本或者提示信息
构造函数如下:
package com.pikaqiu.gui;
import javax.swing.*;
public class Demo5 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setBounds(400,300,400,280);
JLabel jLabel = new JLabel("账号:",SwingConstants.LEFT);
jf.add(jLabel);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.2按钮
类:JButton
构造方法如下:
其他方法:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo6 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout()); //设置流布局
jf.setBounds(400,300,400,280);
JButton jb = new JButton("按钮一");
jb.setEnabled(true); //按钮是否可用
jb.setBorderPainted(false); //按钮边界是否显示,默认是true
jf.add(jb);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.3单选按钮组件
类:JRadioButton ButtonGroup
说明:JRadioButton是一个单选按钮,需要将单选按钮加入到按钮组中
构造方法如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo7 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout()); //设置流布局
jf.setBounds(400,300,400,280);
JRadioButton jrb1 = new JRadioButton("男");
JRadioButton jrb2 = new JRadioButton("女");
ButtonGroup group = new ButtonGroup();
group.add(jrb1);
group.add(jrb2);
jf.add(jrb1);
jf.add(jrb2);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.4复选组件框
类:JCheckBox
构造方法如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo7 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout()); //设置流布局
jf.setBounds(400,300,400,280);
JCheckBox box1 = new JCheckBox("吃饭",true);
JCheckBox box2 = new JCheckBox("睡觉",false);
JCheckBox box3 = new JCheckBox("打豆豆",false);
jf.add(box1);
jf.add(box2);
jf.add(box3);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.5下拉列表框组件
类:JComboBox
构造方法如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo7 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout()); //设置流布局
jf.setBounds(400,300,400,280);
JComboBox box = new JComboBox();
box.addItem("--请选择学历--");
box.addItem("高中");
box.addItem("大学");
box.addItem("研究生");
jf.add(box);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.6菜单栏
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo7 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout(FlowLayout.CENTER)); //设置流布局
jf.setBounds(400,300,400,280);
// //一级菜单
// JMenuBar bar = new JMenuBar();
// JMenu menu = new JMenu("菜单一");
// JMenuItem item1 = new JMenuItem("选项一");
// menu.add(item1);
// bar.add(menu);
// jf.add(bar);
//多级菜单
JMenuBar bar = new JMenuBar();
JMenu menu1 = new JMenu("菜单一");
JMenu menu2 = new JMenu("菜单二");
JMenu menu3 = new JMenu("菜单三");
JMenuItem item1 = new JMenuItem("选项一");
JMenuItem item2 = new JMenuItem("选项二");
JMenuItem item3 = new JMenuItem("选项三");
JMenuItem item4 = new JMenuItem("选项四");
JMenuItem item5 = new JMenuItem("选项五");
JMenuItem item6 = new JMenuItem("选项六");
menu1.add(item1);
menu1.add(item2);
menu2.add(item3);
menu2.add(item4);
menu3.add(item5);
menu3.add(item6);
bar.add(menu1);
bar.add(menu2);
bar.add(menu3);
jf.add(bar);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.7文本组件
类:JTextField
构造方法如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo7 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
jf.setBounds(400,300,400,280);
JLabel label = new JLabel("账号:");
JTextField text = new JTextField("请输入:",22);
jf.add(label);
jf.add(text);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.8密码框组件
类:JPasswordField
构造函数如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo7 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
jf.setBounds(400,300,280,280);
JLabel label = new JLabel("账号:");
JTextField text = new JTextField("",22);
jf.add(label);
jf.add(text);
JLabel label1 = new JLabel("密码:");
JPasswordField password = new JPasswordField("",20);
password.setEchoChar('*');
jf.add(label1);
jf.add(password);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
4.9文本域组件
类:JTextArea
构造函数如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo7 {
public static void main(String[] args) {
JFrame jf = new JFrame("Frame");
jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
jf.setBounds(400,300,280,280);
JTextArea area = new JTextArea(20,10);
area.setLineWrap(true); //自动换行
jf.add(area);
area.getText(); //获取文本内容
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
5.常用的布局
5.1流布局FlowLayout
所有组件像流一样,一个一个排放,排满了一行之后排下一行。默认情况下,每个组件是居中排列的,但是也可以设置。
构造方法如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo8 {
public static void main(String[] args) {
JFrame jf = new JFrame("布局测试");
jf.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置流布局
jf.setBounds(400,300,280,280);
JButton button1 = new JButton("A");
JButton button2 = new JButton("B");
JButton button3 = new JButton("C");
JButton button4 = new JButton("D");
JButton button5 = new JButton("E");
jf.add(button1);
jf.add(button2);
jf.add(button3);
jf.add(button4);
jf.add(button5);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
5.2边界布局BorderLayout
边界布局是默认的布局管理方式,边界布局将容器分成了东、南、西、北、中5个区域。
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo8 {
public static void main(String[] args) {
JFrame jf = new JFrame("布局测试");
jf.setLayout(new BorderLayout()); //设置流布局
jf.setBounds(400,300,280,280);
JButton button1 = new JButton("北部");
JButton button2 = new JButton("东部");
JButton button3 = new JButton("南部");
JButton button4 = new JButton("西部");
JButton button5 = new JButton("中心");
jf.add(button1,BorderLayout.NORTH);
jf.add(button2,BorderLayout.EAST);
jf.add(button3,BorderLayout.SOUTH);
jf.add(button4,BorderLayout.WEST);
jf.add(button5,BorderLayout.CENTER);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
5.3网格布局管理器
网格布局是将容器划分为网格:所有的组件都将按照行和列排列,网格的个数由行数和列数决定。每个组件会填满空格,改变容器的大小,组件的大小也会随之改变。
构造方法如下:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class Demo8 {
public static void main(String[] args) {
JFrame jf = new JFrame("布局测试");
jf.setLayout(new GridLayout(3,3,10,20)); //设置流布局
jf.setBounds(400,300,400,280);
JButton button1 = new JButton("A");
JButton button2 = new JButton("B");
JButton button3 = new JButton("C");
JButton button4 = new JButton("D");
JButton button5 = new JButton("E");
JButton button6 = new JButton("F");
JButton button7 = new JButton("G");
jf.add(button1);
jf.add(button2);
jf.add(button3);
jf.add(button4);
jf.add(button5);
jf.add(button6);
jf.add(button7);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
6.常用的事件监听器
一个事件模型中有三个对象:事件源,事件,以及监听程序
使用步骤:
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class Demo9 {
public static void main(String[] args) {
JFrame jf = new JFrame("监听事件测试");
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
jf.setBounds(400,300,300,300);
JTextArea area = new JTextArea(10,20);
area.setLineWrap(true);
JButton button = new JButton("暴打小苏");
button.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
area.append("小苏耗子为汁");
}
});
jf.add(area);
jf.add(button);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
7.项目登录界面搭建
package com.pikaqiu.gui;
import javax.swing.*;
import java.awt.*;
public class loginDemo {
public static void main(String[] args) {
JFrame jf = new JFrame("登录");
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
jf.setBounds(400,300,300,200);
JLabel label1 = new JLabel("账号:");
JTextField userName = new JTextField("",20);
JLabel label2 = new JLabel("密码:");
JPasswordField pwd = new JPasswordField("",20);
JTextField out = new JTextField("登录状态",20);
JButton jb = new JButton("登录");
jf.add(label1);
jf.add(userName);
jf.add(label2);
jf.add(pwd);
jf.add(out);
jf.add(jb);
jf.setResizable(false);
jb.setSize(40,20);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}