Java学习笔记(四)
十七、图形化界面-Swing
在Java中所有的Swing都保存在javax.swing包中
组件:JComponent
常用的组件是JButton、JLabel、JTextField
容器:Container
所有的组件都应该放到容器之中。在容器之中,所有的组件都可以设置在容器中的位置、大小等等
常用的容器是JFrame、JDialog、JPanel、JScrollPane(滚动条)
布局管理器:LayoutManager
使用布局管理器可以使容器中的组件按照指定的位置进行摆放,另外的一个好处是,即使容器改变了大小,布局管理器也可以准确的把组件放到指定的位置,这样就可以有效的保证版面不会混乱。
常用的有FlowLayout、GridLayout、
(一) 容器之JFrame(java.swing.JFrame)
背景颜色的设置利用Color.颜色英文大写(导包java.awt.Color)
补充:Dimension类(java.awt.Dimension)
Point类:(java.awt.Point)
(二) 组件之JLabel(java.swing.JLabel)
JLabel组件表示的是一个标签,本身是用于显示信息的,一般情况下是不能直接更改其显示内容的。创建完的Label对象可以通过容器(比如JFrame)中的add()方法加入到容器之中。
补充Font类(java.awt.Font)
//例子:
public static void main(String args[]) {
JFrame frame = new JFrame("Welcome To MLDN") ; // 实例化窗体对象
JLabel lab = new JLabel("MLDN", JLabel.CENTER);// 实例化对象,使用居中对齐
Font fnt = new Font("Serief", Font.ITALIC + Font.BOLD, 28);
lab.setFont(fnt) ;
lab.setForeground(Color.RED) ; // 设置标签的文字颜色
frame.add(lab) ; // 向容器中加入组件
Dimension dim = new Dimension() ; // 实例化Dimension对象
dim.setSize(200, 70) ; // 设置大小
frame.setSize(dim) ; // 设置组件大小
frame.setBackground(Color.WHITE) ; // 设置窗体的背景颜色
Point point = new Point(300,200) ; // 设置显示的坐标点
frame.setLocation(point) ; // 设置窗体的显示位置
frame.setVisible(true) ; // 让组件显示
}
(三) 组件之JButton(java.swing.JButton)
(四) 组件之单行文本输入框JTextField(java.swing.JTextField)
(五) 组件之密码文本输入框JPasswordField(java.swing.JPasswordField)
(六) 组件之多行文本输入框JTextArea(java.swing.JTextArea)
//例子(为文本域加入滚动条):
public static void main(String args[]) {
JFrame frame = new JFrame("Welcome To MLDN") ; // 实例化窗体对象
JTextArea jta = new JTextArea(3,20) ; // 构造一个文本域
jta.setLineWrap(true) ; // 如果内容过长,自动换行
// 在文本域上加入滚动条,水平和垂直滚动条始终出现
JScrollPane scr = new JScrollPane(jta,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JLabel lab = new JLabel("多行文本域:") ; // 定义标签
frame.setLayout(new GridLayout(2,1)); // 设置布局管理器
frame.add(lab) ; // 向容器中增加组件
frame.add(scr) ; // 向容器中增加组件
frame.setSize(300, 150) ; // 设置窗体大小
frame.setLocation(300,200) ; // 设置窗体的显示位置
frame.setVisible(true) ; // 让组件显示
}
(七) 布局管理器之FlowLayout(java.awt.FlowLayout)
组件像流水一样依次进行排列
(八) 布局管理器之BorderLayout(java.awt.BorderLayout)
将一个窗体的版面划分成东、西、南、北、中五个区域,可以直接将需要的组件放到这五个区域中即可。
(九) 布局管理器之GridLayout(java.awt.GridLayout)
表格式存放组件
(十) 布局管理器之绝对定位
(十一) JMenu、JMenuBar、JMenuItem
JMenu由JMenuItem组成,JMenuBar由JMenu组成。
//例子:
public static void main(String[] args) {
JFrame frame = new JFrame("Welcome To MLDN"); // 定义窗体
JTextArea text = new JTextArea(); // 定义文本域
text.setEditable(true); // 定义文本组件可编辑
frame.getContentPane().add(new JScrollPane(text)); // 在面板中加入文本框及滚动条
JMenu menuFile = new JMenu("文件"); // 定义JMenu组件
menuFile.setIcon(new ImageIcon("d:" + File.separator + "icons"+ File.separator + "file.gif"));// 定义显示图标
JMenuBar menuBar = new JMenuBar(); // 定义JMenuBar
JMenuItem newItem = new JMenuItem("新建",
new ImageIcon("d:" + File.separator + "icons" + File.separator + "new.gif")); // 创建JMenuItem
JMenuItem openItem = new JMenuItem("打开",
new ImageIcon("d:" + File.separator + "icons" + File.separator + "open.gif")); // 创建JMenuItem
JMenuItem closeItem = new JMenuItem("关闭",
new ImageIcon("d:" + File.separator + "icons" + File.separator + "close.gif")); // 创建JMenuItem
JMenuItem exitItem = new JMenuItem("退出",
new ImageIcon("d:" + File.separator + "icons" + File.separator + "exit.gif")); // 创建JMenuItem
newItem.setMnemonic('N') ; // 设置快捷键N
openItem.setMnemonic('O') ; // 设置快捷键O
closeItem.setMnemonic('C') ; // 设置快捷键C
exitItem.setMnemonic('E') ; // 设置快捷键E
newItem.setAccelerator(KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK)); // Ctrl + N
openItem.setAccelerator(KeyStroke.getKeyStroke('O',java.awt.Event.CTRL_MASK)); // Ctrl + O
closeItem.setAccelerator(KeyStroke.getKeyStroke('C',java.awt.Event.ALT_MASK)); // Alt + C
exitItem.setAccelerator(KeyStroke.getKeyStroke('E', java.awt.Event.ALT_MASK)); // Alt + E
menuFile.add(newItem) ; // 加入菜单项
menuFile.add(openItem) ; // 加入菜单项
menuFile.add(closeItem) ; // 加入菜单项
menuFile.addSeparator() ; // 加入分隔线
menuFile.add(exitItem) ; // 加入菜单项
menuBar.add(menuFile); // 加入JMenu
}
(十二) 事件处理
首先,对于某种类型的事件XXXEvent,要想接收并处理该类事件,必须定义相应的事件监听器类,这个类需要实现针对该类事件的特定接口XXXListener。
其次,事件监听器类要实现该接口XXXListener中对事件处理的方法。
第三,对于事件源,必须使用addXXXListener(XXXListener)注册事件监听器类,以便当事件产生时,能够被监听器接收和处理。
常见的事件监听:在整个事件处理中Java提供了很多的适配器类XXXAdapter,方便用户进行事件的处理,如果只想覆写一两个方法,就可以用适配器类作为匿名内部类使用。
十八、泛型
泛型类定义格式:
[访问权限] class 类名称<泛型类型1,泛型类型2,…泛型类型3>{
[访问权限] 泛型类型标识 变量名称 ;
[访问权限] 泛型类型标识 方法名称(){} ;
[访问权限] 返回值类型声明 方法名称(泛型类型标识 变量名称){} ;}
泛型对象定义:
类名称<具体类> 对象名称 =new 类名称<具体类>() ;
泛型方法的简单定义:
[访问权限] <泛型标识> 泛型标识方法名称([泛型标识 参数名称])
Collection(类集): 一组单独元素集合
List :保存的对象有顺序,按照元素的索引位置检索对象。允许重复元素。
Set :不允许保存重复的元素。元素之间没有顺序。靠元素值检索对象。
List中最主要的是动态数组(ArrayList(java.util.ArrayList))