一·教材学习内容总结
1.(1)Java把Component类的子类或间接子类创建的对象称为一个组件
(2)Java把Container的子类或间接子类创建的对象称为一个容器.
(3)可以向容器添加组件。Container类提供了一个public方法:add( ),一个容器可以调用这个方法将组件添加到该容器中。
2.JFrame类是Container类的间接子类。当需要一个窗口时,可使用JFrame或其子类创建一个对象。
注:窗口也是一个容器,可以向窗口添加组件。需要注意的是,窗口默认地被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。
3.JFrame构造方法:
JFrame() 创建一个无标题的窗口。
JFrame(String s) 创建标题为s的窗口。
常用方法
1)public void setBounds(int a,int b,int width,int height 设置窗口的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。
2)public void setSize(int width,int height) 设置窗口的大小。
3)public void setLocation(int x,int y) 设置窗口的位置,默认位置是(0,0)
4)public void setVisible(boolean b) 设置窗口是否可见,窗口默认是不可见的。
5)public void setResizable(boolean b) 设置窗口是否可调整大小,默认可调整大小。
6)public void dispose() 撤消当前窗口,并释放当前窗口所使用的资源。
7)public void setExtendedState(int state) 设置窗口的扩展状态.
8)public void setDefaultCloseOperation(int operation) 该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。如:EXIT_ON_CLOSE
9)public void setLayout(LayoutManager mgr) 设置此容器的布局管理器。
10)public Component add(Component comp) 将指定组件追加到此容器的尾部。
11)public void setMenuBar(MenuBar mb) 将此 frame 的菜单栏设置为指定的菜单栏。
12)public void validate() 使用 validate 方法会使容器再次布置其子组件。在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。
4.菜单
1)菜单条
JComponent类的子类JMenubar负责创建菜单条,JFrame类有一个将菜单条放置到窗口中的方法:setJMenuBar(JMenuBar bar);该方法将菜单条添加到窗口的顶端。
菜单条JMenuBar类构造方法:JMenuBar();
JMenuBar Mbar=new JMenuBar()
2)菜单
JComponent类的子类JMenu负责创建菜单。
菜单JMenu类构造方法:JMenu() ; JMenu(String s) ; JMenu m=new JMenu();
常用方法:
public void add(JMenuItem item) 向菜单增加由参数item指定的菜单项
public JMenuItem getItem(int n) 得到指定索引处的菜单选项。
public int getItemCount() 得到菜单选项的数目。
3)菜单项
JComponent类的子类JMenuItem负责创建菜单项,JMenuItem类的主要方法有以下几种:
JMenuItem(String s) 构造有标题的菜单项。
JMenuItem(String text, Icon icon) 构造有标题和图标的菜单项
public void setAccelerator(KeyStroke keyStroke)为菜单项设置快捷键
5.常用组件
1)文本框:由JComponent的子类JTextField创建文本框。
–构造函数:JTextField( ) ; JTextField(int columns) ;
–常用方法:public String getText();
– public void setText(String t);
2)文本区:由JComponent的子类JTexArea创建文本区。
–构造函数:JTextArea() ;JTextArea(int rows, int columns)
–常用方法:public String getText();
– public void setText(String t);
3)按钮:由JComponent的子类JButton类用来创建按钮。
–构造函数:JButton() ; JButton(String text) ;
–常用方法:public void addActionListener(ActionListener l);
4)标签:由JComponent的子类JLabel类用来创建标签。
–构造函数:JLabel() ; JLabel(String text) ; JLabel(Icon image) ;
–常用方法:public String getText();
– public void setText(String t);
5)选择框:由JComponent的子类JCheckBox类用来创建选择框
–构造函数: JCheckBox() ;JCheckBox(String text) ;
–常用方法: public void addItemListener(ItemListener l)
– public void addActionListener(ActionListener l)
ItemListener接口中:Object getItemSelectable()相当于getSource();
– public int getStateChange();
– 若被选中SELECTED/DESEELCTED
6)单选按钮:由JComponent的子类JRadioButton类用来创建单项选择框。
–构造函数: JRadioButton() ; JRadioButton(String text) ;
–常用方法: public void addItemListener(ItemListener l)
7)下拉列表:由JComponent的子类JComboBox类用来创建下拉列表。
–构造函数:JComboBox() ; JComboBox(Object[] items)
–常用方法: public void addItemListener(ItemListener l)
– public Object getSelectedItem();
– public int getSelectedIndex()
8)密码框:由JComponent的子类JPasswordField创建密码框.
–构造函数:JPasswordField() ; JPasswordField(int columns)
–常用方法:public String getText();
– public void setText(String t);
–public void setEchoChar(char c)使用该方法重新设置回显字符.
–public char[] getPassword()方法可以返回实际的密码
6.常用容器
1)JPanel 面板:
构造方法:JPanel() ;如: JPanel p=new JPanel();
常用方法:public void add();
使用JPanel创建面板,再向这个面板添加组件,然后把这个面板添加到其它容器中。JPanel面板的默认布局是FlowLayout布局。
2)JTabbedPane选项卡窗格
可以使用JTabbedPane容器作为中间容器。当用户向JTabbedPane容器添加一个组件时,JTabbedPane容器就会自动为该组件指定对应的一个选项卡,即让一个选项卡对应一个组件。各个选项卡对应的组件层叠式放入JTabbedPane容器,当用户单击选项卡时,JTabbedPane容器将显示该选项卡对应的组件。选项卡默认地在JTabbedPane容器的顶部,从左向右依次排列。JTabbedPane容器可以使用:
add(String text,Component c);
方法将组件c添加到JTabbedPane容器中,并指定和组件c对应的选项卡的文本提示是text。
3)滚动窗格JScrollPane
滚动窗格只可以添加一个组件,可以把一个组件放到一个滚动窗格中,然后通过滚动条来观看该组件。JTextArea不自带滚动条,因此就需要把文本区放到一个滚动窗格中。例如,
JScrollPane scroll = new JScrollPane(new JTextArea());
4)拆分窗格JSplitPane
拆分窗格就是被分成两部分的容器。拆分窗格有两种类型:水平拆分和垂直拆分。水平拆分窗格用一条拆分线把窗格分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格用一条拆分线把窗格分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。
JSplitPane的两个常用的构造方法:
JSplitPane(int a,Component b,Component c)
5)JLayeredPane分层窗格
如果添加到容器中的组件经常需要处理重叠问题,就可以考虑将组件添加到分层窗格。分层窗格分成5个层,分层窗格使用
add(Jcomponent com, int layer);
7.常用布局
(1)FlowLayout布局:是JPanel型容器的默认布局
1)创建布局对象 : FlowLayout flow=new FlowLayout();
2)容器con使用布局对象: con.setLayout(flow);
3)con可以使用Container类提供的add方法将组件顺序地添加到容器中
FlowLayout布局对象调用相应的方法可以重新设置布局的对齐方式等.
如: public void setAlignment(int align)
(2)BorderLayout布局:
BorderLayout 布局是Window型容器的默认布局 。
使用BorderLayout布局的容器con,可以使用add方法将一个组件b添加到中心区域:con.add(b,BorderLayout.CENTER);
或 con.add(BorderLayour.CENTER,b);
(3)CardLayout 布局 : 使用CardLayout的一般步骤如下:
1)创建CardLayout对象 CardLayout card=new CardLayout();
2)为容器设置布局 con.setLayout(card);
3)容器调用add(String s,Component b)将组件b加入容器,并给出了显示该组件的代号s。
4)布局对象card用CardLayout类提供的show()方法,显示容器con中组件代号为s的组件:card.show(con,s);
使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面一张一样,这个被显示的组件将占据所有的容器空间,依次排序
(4)GridLayout布局 :
GridLayout布局策略是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。 GridLayout布局编辑器的一般步骤如下:
1)创建布局对象,指定划分网格的行数m和列数n
GridLayout grid=new new GridLayout(10,8);
2)使用GridLayout布局的容器调用方法add(Component c)将组件c加入容器。
(5)null布局
可以把一个容器的布局设置为null布局(空布局)。空布局容器可以准确地定位组件在容器的位置和大小。setBounds(int a,int b,int width,int height)方法是所有组件都拥有的一个方法,组件调用该方法可以设置本身的大小和在容器中的位置。
例如,p是某个容器,
p.setLayout(null);
(6)BoxLayout布局
•Box类的类(静态)方法 createHorizontalBox()获得一个行型盒式容器;
•使用Box类的类(静态)方法 createVerticalBox()获得一个列型盒式容器。
•想控制盒式布局容器中组件之间的距离,需使用水平支撑组件或垂直支撑。
8.处理事件
处理事件的接口:
监视器负责处理事件源发生的事件。监视器是一个对象,为了处理事件源发生的事件,监视器这个对象会自动调用接口中一个方法来处理事件。
(1)ActionEvent
1)ActionEvent事件源 :
文本框、按纽、菜单项、密码框和单选按纽都可以触发ActionEvent事件,即都可以成为ActionEvent事件的事件源。
2)注册监视器: ActionListener接口作为监视器
事件源.addActionListener(ActionListener listen)
将实现ActionListener接口的类的实例注册为事件源的监视器。
3)ActionListener接口:重写接口中的方法作为事件处理。
ActionListener接口在java.awt.event包中,该接口中只有一个方法:
public void actionPerformed(ActinEvent e)
事件源触发ActionEvent事件后,监视器将发现触发的ActionEvent事件,然后调用接口中的这个方法对发生的事件作出处理。ActionEvent类事先创建的事件对象就会传递给该方法的参数e。
4)ActionEvent类中的方法:下面的方法能够获取发生动作的事件源。
public Object getSource()
调用该方法可以获取发生ActionEvent事件的事件源对象的引用。
public String getActionCommand()
调用该方法可以获取发生ActionEvent事件时,和该事件相关的一个命令字符串。
(2)ItemEvent
1)ItemEvent事件源 :选择框、下拉列表都可以触发ItemEvent事件。
2)注册监视器:ItemListener接口作为监视器
事件源.addItemListener(ItemListener listen)
将实现ItemListener接口的类的实例注册为事件源的监视器。
3)ItemListener接口:重写方法作为事件处理
ItemListener接口在java.awt.event包中,该接口中只有一个方法
public void itemStateChanged(ItemEvent e)
事件源触发ItemEvent事件后,监视器将发现触发的ItemEvent事件,然后调用接口中的itemStateChanged(ItemEvent e)方法对发生的事件作出处理。ItemEvent类事先创建的事件对象就会传递给该方法的参数e。
4)ItemEvent类中的方法 :
getSource()方法返回发生Itemevent事件的事件源外
getItemSelectable()方法返回发生Itemevent事件的事件源。
(3)DocumentEvent
1)DocumentEvent事件源 :文本区所维护的文档能触发DocumentEvent事件
2)注册监视器:DocumentListener作为监视器
addDucumentListener(DocumentListener listen)
将实现DocumentListener接口的类的实例注册为事件源的监视器。
3)DocumentListener接口:重写接口中的方法作为事件处理
DocumentListener接口在javax.swing.event包中,该接口中有三个方法:
public void changedUpdate(DocumentEvent e)
public void removeUpdate(DocumentEvent e)
public void insertUpdate(DocumentEvent e)
(4)MouseListener
1)使用MouseListener接口可以处理以下5种操作触发的鼠标事件
在事件源上按下鼠标键、在事件源上释放鼠标键、在事件源上击鼠标键、鼠标进入事件源、鼠标退出事件源。
注册监视器:MouseListener接口作为监视器
事件源.addMouseListener(MouseListener listener)。
2)MouseListener接口中有如下方法:重写方法作为事件源的处理
mousePressed(MouseEvent) 负责处理在组件上按下鼠标键触发的鼠标事件
mouseReleased(MouseEvent) 负责处理在组件上释放鼠标键触发的鼠标事件
mouseEntered(MouseEvent) 负责处理鼠标进入组件触发的鼠标事件
mouseExited(MouseEvent) 负责处理鼠标离开组件触发的鼠标事件
mouseClicked(MouseEvent) 负责处理在组件上单击鼠标键触发的鼠标事件
3)MouseEvent 中有下列几个重要的方法:
getX() 获取鼠标指针在事件源坐标系中的x-坐标。
getY() 获取鼠标指针在事件源坐标系中的y-坐标。
getModifiers() 获取鼠标的左键或右键。
getClickCount() 获取鼠标被单击的次数。
getSource() 获取发生鼠标事件的事件源。
4)使用MouseMotionListener接口可以处理以下两种操作触发的鼠标事件, 在事件源上拖动鼠标、在事件源上移动鼠标。
事件源注册监视器的方法是
addMouseMotionListener(MouseMotionListener listener)。
MouseMotionListener接口中有如下方法:
mouseDragged(MouseEvent) 负责处理拖动鼠标触发的鼠标事件。
mouseMoved(MouseEvent) 负责处理移动鼠标触发的鼠标事件。
9.焦点事件
1)焦点事件源 :组件可以触发焦点事件。
2)注册监视器:组件可以使用
addFocusListener(FocusListener listener)
注册焦点事件监视器。
3)FocusListener接口 :
创建监视器的类必须要实现FocusListener接口,该接口有两个方法:
public void focusGained(FocusEvent e)
public void focusLost(FocusEvent e)
当发生FocusEvent事件时,监视器调用类实现的接口中的相应方法。
4)组件也可调用
public boolean requestFocusInWindow()
方法可以获得输入焦点。
10.键盘事件
1)某个组件使用addKeyListener方法注册监视器。
2)接口KeyListener中有如下方法:
public void keyPressed(KeyEvent e),
public void keyTyped(KeyEvent e),
public void KeyReleased(KeyEvent e)
3)相关方法:
public int getKeyCode()判断哪个键被按下、敲击或释放,返回一个键码值 。
getKeyChar()判断哪个键被按下、敲击或释放,返回键上的字符。
11.窗口事件
(1) public void windowActivated(WindowEvent e) 当窗口从非激活状态到激活时,窗口的监视器调用该方法。
(2) public void windowDeactivated(WindowEvent e) 当窗口激活状态到非激活状态时,窗口的监视器调用该方法。
(3) public void windowClosing(WindowEvent e) 当窗口正在被关闭时,窗口的监视器调用该方法。
(4) public void windowClosed(WindowEvent e) 当窗口关闭后,窗口的监视器调用该方法。
(5) public void windowIconified(WindowEvent e) 当窗口图标化时,窗口的监视器调用该方法。
(6) public void windowDeiconified(WindowEvent e) 当窗口撤消图标化时,窗口的监视器调用该方法。
(7) public void windowOpened(WindowEvent e) 当窗口打开时,窗口的监视器调用该方法。
12.事件总结
1)授权模式
Java的事件处理是基于授权模式,即事件源调用调用方法将某个对象注册为自己的监视器。
2)接口回调
addXXXListener(XXXListener listener)方法中的参数是一个接口,listener可以引用任何实现了该接口的类所创建的对象,当事件源发生事件时,接口listener立刻回调被类实现的接口中的某个方法。
3)方法绑定
当事件源触发事件发生后,监视器准确知道去调用哪个方法。
4)保持松耦合
当事件源触发事件发生后,系统知道某个方法会被执行,但无须关心到底是哪个对象去调用了这个方法,因为任何实现接口的类的实例(做为监视器)都可以调用这个方法来处理事件。
13.MVC
–模型(model) 用于存储数据的对象。
–视图(view) 为模型提供数据显示的对象。
–控制器(controller)处理用户的交互操作,对于用户的操作作出响应,让模型和视图进行必要的交互,即通过视图修改、获取模型中的数据;当模型中的数据变化时,让视图更新显示。
14.对话框
1)–有模式的对话框:当这个对话框处于激活状态时,只让程序响应对话框内部的事件,而且将堵塞其它线程的执行,用户不能再激活对话框所在程序中的其它窗口,直到该对话框消失不可见。
消息对话框是有模式对话框,进行一个重要的操作动作之前,最好能弹出一个消息对话框。可以用javax.swing包中的JOptionPane类的静态方法:
public static void showMessageDialog(
Component parentComponent,
String message,
String title,
int messageType)
输入对话框含有供用户输入文本的文本框、一个确认和取消按钮,是有模式对话框 。
可以用javax.swing包中的JOptionPane类的静态方法:
public static
String showInputDialog(Component parentComponent,
Object message,
String title,
int messageType)
确认对话框是有模式对话框。
可以用javax.swing包中的JOptionPane类的静态方法:
public static int showConfirmDialog(Component parentComponent,
Object message,
String title,
int optionType)
可以用javax.swing包中的JColorChooser类的静态方法: public static Color showDialog(Component component,
String title,
Color initialColor)
2)–无模式对话框:当这个对话框处于激活状态时,能再激活其它窗口,也不堵塞其它线程的执行。