1.Swing
轻量级组件,由java编写
2.常用窗口
2.1 JFrame
JFrame是一个容器,是一个顶层窗口
常用方法:
setSize(int width, int height);
setLocation(int x, int y);//窗口距离屏幕左上角位置,默认(0,0)
setBounds(int x,int y,int width,int height) //设置窗⼝的初始位置是(a,b),窗⼝的宽是width,⾼是height。
setVisible(boolean b);//窗口是否可见,默认不可见
setResizable(boolean b);//窗口能否调整大小,默认可调整
JFrame的关闭方式
setDefaultCloseOperation(int op)
设置单击窗口右上角的×号后程序会如何处理,有以下四种:
DO_NOTHING_ON_CLOSE //什么也不做
HIDE_ON_CLOSE //隐藏当前窗⼝
DISPOSE_ON_CLOSE //隐藏当前窗⼝,并释放窗体占有的其他资源
EXIT_ON_CLOSE //结束窗⼝所在的应⽤程序
示例:
public class JFrameTest {
public static void main(String[] args) {
JFrame jf = new JFrame("JFrame");//创建窗口标题为JFrame的窗口框架
jf.setSize(400, 300);//设置窗口大小,setSize(x, y)
jf.setLocationRelativeTo(null);//设置窗口默认居中显示
jf.setVisible(true);//设置窗口可见
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
2.2 JDialog
是从一个窗口弹出的另外一个窗口
构造函数:
JDialog();
JDialog(Frame f); // 指定⽗窗⼝
JDialog(Frame f, String title); // 指定⽗窗⼝ + 标题
常用来配合事件监听器,如点击注册按钮后,主窗口旁边弹出一个注册窗口。
常用方法:与JFrame类似。
3.常用面板
面板,一种容器,可以向容器中添加其他组件,但是它本身需已经被加入一个容器中。
3.1 JPanel
类:JPanel
构造方法:
JPanel();//默认布局管理,FlowLayout
JPanel(LayoutManagerLayout layout);//创建指定布局管理的面板
示例:
public class JFrameTest {
public static void main(String[] args) {
JFrame jf = new JFrame("JFrame");
jf.setSize(400, 300);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel jp = new JPanel();
JButton jb1 = new JButton("button1");
JButton jb2 = new JButton("button2");
jp.add(jb1); jp.add(jb2);//将按钮添加进面板中
jf.add(jp);//再将面板添加进窗口这个容器
}
}
4.常用组件
4.4单选按钮组件
类:JRadioButton ButtonGroup
说明:单选按钮,需要将按钮加入到按钮组中,否则无法单选
示例:
JFrame jf = new JFrame("JFrame");
jf.setLayout(new FlowLayout());
jf.setSize(600, 400);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JRadioButton jrb = new JRadioButton("男");
JRadioButton jrb2 = new JRadioButton("女");
ButtonGroup group = new ButtonGroup();
group.add(jrb);
group.add(jrb2);
jf.add(jrb);
jf.add(jrb2);
4.5复选按钮
类:JCheckBox
示例:
JFrame jf = new JFrame("JFrame");
jf.setLayout(new FlowLayout());
jf.setSize(600, 400);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JCheckBox jcb = new JCheckBox("编程");
JCheckBox jcb2 = new JCheckBox("睡觉");
JCheckBox jcb3 = new JCheckBox("上课");
jf.add(jcb);
jf.add(jcb2);
jf.add(jcb3);
4.6下拉列表组件
类:JComboBox
方法:addItem
示例:
JFrame jf = new JFrame("JFrame");
jf.setLayout(new FlowLayout());
jf.setSize(600, 400);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JComboBox box = new JComboBox();
box.addItem("--请选择学历--");
box.addItem("高中");
box.addItem("大学");
box.addItem("研究生");
jf.add(box);
4.7菜单栏
创建菜单条:JMenuBar
创建菜单:JMenu
创建菜单项:JMenuItem
总结:菜单项添加到菜单中,菜单添加到菜单条中。
示例:
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);
menu1.add(item3);
menu2.add(item4);
menu2.add(item5);
menu3.add(item6);
bar.add(menu1);
bar.add(menu2);
bar.add(menu3);
jf.add(bar);
4.8文本组件
类:JTextField
构造方法:
JTextField();
JTextField(String txt); //指定默认文字
JTextField(int fieldWidth); //指定文本框长度
JTextField(String txt, int fieldWidth);
示例:
JTextField txt = new JTextField(22);
JLabel lable = new JLabel("账号");
jf.add(lable);
jf.add(txt);
4.9密码框组件
JPasswordField
构造方法:同文本组件
其他方法:setEchoChar(),默认为黑点
示例:
JPasswordField pswd = new JPasswordField("",20);
JLabel lable2 = new JLabel("密码");
jf.add(lable2);
jf.add(pswd);
4.10文本域组件
JTextArea
构造方法:
JTextArea();
JTextArea(String txt);
JTextArea(int rows, int cols);//行列
其他方法:
setLineWrap();//设置文本是否自动换行
getText();//获取文本
示例:
JTextArea area = new JTextArea(10,40);
area.setLineWrap(true);
jf.add(area);
5.常用布局
5.1流布局
所有组件就像流一样,一个个排放,一行放满了放下一行。默认下,组件居中排列的。
构造方法:
FlowLayout();
FlowLayout(int aligment);
//默认为FlowLayout.CENTER,一般设置为FlowLayout.LEFT
aligemnt取值:
FlowLayout.LEFT = 0
FlowLayout.CENTER = 1
FlowLayout.RIGHT = 2
通过setLayout()设置布局,
示例:
JFrame jf = new JFrame("JFrame");
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
jf.setSize(600, 600);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton jb1 = new JButton("A");
JButton jb2 = new JButton("B");
JButton jb3 = new JButton("C");
JButton jb4 = new JButton("D");
JButton jb5 = new JButton("E");
jf.add(jb1);
jf.add(jb2);
jf.add(jb3);
jf.add(jb4);
jf.add(jb5);
5.2边界布局
该布局是默认的布局方式,将容器分成了东西南北中五个区域
1.在new的时候指定内容
2.在给JFrame容器add组件时指定边界。
示例:
JFrame jf = new JFrame("JFrame");
jf.setLayout(new BorderLayout());//这里注意设置为边界布局
jf.setSize(600, 600);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton jb1 = new JButton("北");
JButton jb2 = new JButton("东");
JButton jb3 = new JButton("南");
JButton jb4 = new JButton("西");
JButton jb5 = new JButton("中");
jf.add(jb1, BorderLayout.NORTH);
jf.add(jb2, BorderLayout.EAST);
jf.add(jb3, BorderLayout.SOUTH);
jf.add(jb4, BorderLayout.WEST);
jf.add(jb5, BorderLayout.CENTER);
5.3网格布局
将容器划分为网络,所有组件按照行和列排列
构造方法:
GridLayout(int rows, int cols);
GridLayout(int rows, int cols, int horizGap, int vertGap);//水平间隔,垂直间隔
示例:
JFrame jf = new JFrame("JFrame");
jf.setLayout(new GridLayout(3, 3, 10, 10));
jf.setSize(600, 600);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton jb1 = new JButton("A");
JButton jb2 = new JButton("B");
JButton jb3 = new JButton("C");
JButton jb4 = new JButton("D");
JButton jb5 = new JButton("E");
jf.add(jb1);
jf.add(jb2);
jf.add(jb3);
jf.add(jb4);
jf.add(jb5);
6.常用事件监听器
事件模型的三个对象:事件源,事件,监听程序。
事件源:事件发生的地方,如点击按钮,按钮即为事件源
事件:要发生的事情
事件处理:对发生的事情做出的处理方案
事件监听:把事件源和事件关联起来
动作事件监听:ActionEvent,事件源:JButton,JList,JTextField等,方法:addActionListener();
焦点事件监听:FocusEvent,事件源:Component及其派生,方法:addFocusListener();
示例:点击按钮文本框中出现文字
JFrame jf = new JFrame("JFrame");
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
jf.setSize(600, 600);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JTextArea area = new JTextArea(10,20);
area.setLineWrap(true);
JButton button = new JButton("点击按钮生成文字");
button.addActionListener(e->{
area.append("年轻人好自为之");
});
jf.add(area);
jf.add(button);