概述
swing的事件不像js的事件那么简单,只需要记住几个click dbclick change focus blur 等等那样. 它有比较复杂的事件体系构成, 不同分类的组件拥有不同的事件模型
每个人对每一种语言的理解和学习,都是从不同的维度,就像我先入手的html一样, 喜欢从元素, 样式 ,事件,自定义组件 等方向由浅至深的去理解.
如果想系统的学习一种语言, 更扎实的应该算书籍. 可惜的是,在swing方面,没有适合自己学习习惯的博客指引方向.
曙光
意外的读到David Flanagan 写的Nutshell( 快速入门) , 很符合系统对一些语言的学习( 菜鸟教程那样的风格类似,但是比较有深度) .
简单的几张图和api表格把 swing的 Event 轮廓描述的很清楚
JFC in a Nutshell
清晰的描述了Event API的架构图
列举了常用的listerner
Swing 继承AWT 的事件 使用的listener 及方法名称 ,分别应用在那些基础组件之上
Event Listener | Listener Methods | Registered on |
---|---|---|
ActionListener | actionPerformed() | AbstractButton, Button, ButtonModel, ComboBoxEditor, JComboBox, JFileChooser, JTextField, List, MenuItem, TextField, Timer |
AdjustmentListener | adjustmentValue- | Adjustable, |
Changed() | JScrollBar, Scrollbar | |
ComponentListener | componentHidden(), componentMoved(), componentResized(), componentShown() | Component |
ContainerListener | componentAdded(), componentRemoved() | Container |
FocusListener | focusGained(), focusLost() | Component |
ItemListener | itemStateChanged() | AbstractButton, ButtonModel, Checkbox, CheckboxMenuItem, Choice, ItemSelectable, JComboBox, List |
KeyListener | keyPressed(), keyReleased(), keyTyped() | Component |
MouseListener | mouseClicked(), mouseEntered(), mouseExited(), mousePressed(), mouseReleased() | Component |
MouseMotionListener | mouseDragged(), mouseMoved() | Component |
TextListener | textValueChanged() | TextComponent |
WindowListener | windowActivated(), windowClosed(), windowClosing(), windowDeactivated(), windowDeiconified(), windowIconified(), windowOpened() | Window |
swing特有的Listerner 及它的基础组件, 用在那些方法
Event Listener | Listener Methods | Registered on |
---|---|---|
AncestorListener | ancestorAdded(), ancestorMoved(), ancestorRemoved() | Action, JComponent |
CaretListener | caretUpdate() | JTextComponent |
CellEditorListener | editingCanceled(), editingStopped() | CellEditor, |
ChangeListener | stateChanged() | AbstractButton, BoundedRangeModel, ButtonModel, JProgressBar, JSlider, JTabbedPane, JViewport, MenuSelectionManager, SingleSelectionModel |
HyperlinkListener | hyperlinkUpdate() | JEditorPane |
InternalFrameListener | internalFrame- Activated (), internalFrameClosed(), internalFrameClosing()internalFrame- Deactivated(), internalFrame- Deiconified(), internalFrame- Iconified()internalFrameOpened() | |
ListDataListener | contentsChanged(), intervalAdded(), intervalRemoved() | AbstractListModel, ListModel |
ListSelectionListener | valueChanged() | JList, ListSelectionModel |
MenuDragMouseListener | menuDragMouseDragged(), menuDragMouseEntered(), menuDragMouseExited(), menuDragMouseReleased() | JMenuItem |
MenuKeyListener | menuKeyPressed(), menuKeyReleased(), menuKeyTyped() | JMenuItem |
MenuListener | menuCanceled(), menuDeselected(), menuSelected() | JMenu |
PopupMenuListener | popupMenuCanceled(), | JPopupMenu |
popupMenuWillBecome- | ||
Invisible(), | ||
popupMenuWillBecome- | ||
Visible() | ||
TreeExpansionListener | treeCollapsed(), treeExpanded() | JTree |
TreeSelectionListener | valueChanged() | JTree |
结语
如果在GUI界面的语言上, 也可以像h5中ElemetUI ant-react-desinger layer-ui 等那样有更别样和细致的api ,那应该是程序员的幸福!