Swing
1、
2、Swing组件
JFrame窗体
1、组件容器,各组件载体。继承java.swing.JFrame类。可添加组件,设置事件。有最大化、最小化、关闭按钮。
JFrame jf=new JFrame(title);
Container container=jf.getContentPane();
//窗体转换为容器。
添加/删除组件:container.add(...);
container.remove(...);
2、有两种构造方法:public JFrame()
//初始不可见,无标题的新窗体。
public JFrame(String str)
//初始不可见但有标题。
使可见:jf.setVisible(true)
设置窗体大小:jf.setSize(int x,int y)
//x横边,y竖边
关闭窗体:jf.setDefaultCloseOperation(关闭方式)
JDialog窗体
组件对话框,窗体弹出的窗体。容器。继承java.awt.JDialog类。
主要构造方法:
JLabel
1、继承JComponent。只能显示一行只读文本、一个图像or带图像文本。可指定文本对齐方式。无法产生事件。
构造方法:
图标
1、可放在按钮、标签等组件上。描述组件用途。
2、创建:①Icon接口。必须使用所有方法:
②java.awt.Graphics类。
3、图片图标:利用javax.swing.ImageIcon根据现有图片创建图标。实现Icon接口。支持多种图片格式。构造方法:
图片路径:相对路径起点是工程根目录。
假设图片在Project1/src/Hello/1.jpg
:
①ImageIcon icon=new ImageIcon(“src/Hello/1.jpg");
②URL url=getClass.getResource("1.jpg");
//当前编译后由class文件所在目录查找,路径相对于类文件
ImageIcon icon=new ImageIcon(url);
布局管理器
1、绝对布局:绝对坐标指定组件位置大小。两步:
Container.setLayout(null);
//取消布局管理器
组件或窗体.setBounds(int x,int y,int width,int height);
//设置:位置,宽,长
2、流布局管理器:一行接一行。从左到右摆放。默认在每行居中排列,可改。
使用:setBounds(FlowLayout f);
FlowLayout构造方法:
①alignment:组件具体摆放位置。取值3个。0:左对齐。
②horizGap和vertGap:以像素为单位的水平、垂直间隔。
3、边界布局管理器:默认布局模式(默认放正中心)。东南西北中五个区域。
setBounds(BorderLayout b);
4、网格布局管理器:容器划分为网格,每个组件大小相同。大小随窗体改变。网格中空格个数由行列数决定。从左上角开始,组件按左→右,上→下加入网格,填满整个网格。public GridLayout(int rows,int columns)
//行数,列数。只有一个可以为0,代表一行/一列。
public GridLayout(int rows,int columns,int horizGap,int vertGap)
//指定网格间的水平、垂直距离
面板
容器,继承自java.awt.Container类。可收组件,但也要被加到其它容器中。
JPanel
JPanel p=new JPanel(布局对象);p.add(组件);c.add(p);
JScrollPane:带滚动条。只能放一个组件,不能使用布局管理器。若放多个组件:将多组件放JPanel上,JPanel作为整体组件加到JScrollPane上。
JScrollPane sp=new JScrollPane(组件);c.add(sp);
按钮
继承AbstractButton类。
提交按钮JButton:
public JButton():不带文本和图标,可以后加:
JButton b=new JButton();
b.setMaximumSize(Dimension d);//按钮与图标一样大小
b.setIcon(Icon icon);//按钮图标
b.setTipToolText(String str);//按钮提示文字(鼠标悬停时的显示)
b.setBorderPainted(Boolean bb);//按钮边界显不显示
b.addActionListener(ActionListener a);//监听事件
b.setEnabled(Boolean bb);//按钮是否可用
单选按钮JRadioButton:圆形图标
继承JToggleButton类→继承AbstractButton类。
构造方法:文本、图标、默认是否被选中
按钮组ButtonGroup:单选按钮加入组。
JRadioButton rb=new JRadioButton();
ButtonGroup group=new ButtonGroup();
group.add(rb);
复选按钮JCheckBox:方块图标
继承AbstractButton类。可多选。选中/不选中。
列表
下拉列表框JComboBox:javax.swing.JComponent的子类。
JComboBox模型:
①将项目封装为ComboBoxModel接口(一般模型):自定义一个类实现该接口,再初始化JComboBox对象向上转型为ComboBoxModel接口类型,并实现2个方法:
public void setSelectedItem(Object item);
//设置下拉类表框中的选中项。
public Object getSelectedItem();
//返回选中项。
②自定义类继承AbstractListModel类,方法:
getSize()
:返回列表长度
getElementAt(int index)
:返回指定索引处的值
列表框JList
第一个构造方法可以初始化后再setListData()设置。
Vector类加内容:
Vector v=new Vector();
JList jl=new JList(v);
v.add("abc");
v.add(...);
ListModel类型作参数:ListModel是Swing包的一个接口,提供获取列表框属性的方法。为不完全实现其方法,通常自定义一个类继承该接口抽象类AbstractListModel,内含getElementAt():根据项目索引获取列表框值,getSize():获取列表框项目个数。
DefaultListModel类扩展了AbstractListModel类,∴也可以DefaultListModel对象向上转型为ListModel接口来初始化列表框。提供方法:addElement()将内容添加至列表框。
文本
1、文本框:javax.swing.JTextField,继承javax.swing.text.JTextComponent,单行文本。
2、密码框:javax.swing.JPasswordField
设置回显字符:jp.setEchoChar('*');
3、文本域JTextArea:多行输入。
默认文本、文本域长宽。
可自动换行:jt.setLineWrap(true);
监听
事件源—事件—监听程序:事件源触发事件,产生事件对象,监听器类实现接口,获取接口对象实现方法,事件源调用方法加载监听器类对象。
1、动作事件监听器:
内部类实现:
public class A{
new JButton().addActionListener(new bAction());
...
class bAction implements ActionListener{
public void actionPerformed(ActionEvent arg0){
...
}
}
}
匿名内部类:
new JButton().addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
...
}
});
2、焦点事件监听器
new JButton().addFocusListener(new FocusListener(){
public void focusLost(FocusEvent arg0){
...
}
public void focusGained(FocusEvent arg0){
...
}
});