教材学习内容总结
1.JavaSwing概述
java的java.awt包(Java抽象工具包)提供了许多设计GUI的组件类
Component类的子类或间接子类创建的对象 | 组件 |
Container的子类或间接子类创建的对象 | 容器 |
容器—调用—>public add()方法==》把组件(容器)—添加—>该容器(容器的嵌套)
容器—调用—>removeAll()| remove(Component 0c)==》移除容器中所有组件/参数c指定的组件
容器<==>组件
容器添加/移除组件时,让容器调用validate()方法==》保证容器中的组件能正确实现
2.窗口
Component<-Container<-
JComponent
JPasswordFiled JcomDoBox JRadioButton JCheckBox JButton JTextField JTextArea JTree JTable Jpanel
密码框 下拉列表 单选按钮 复选框 文本按钮 文本框 文本区 树组件 标签 面板
Window
Frame Dialog
JFrame/子类->创建对象==形成==>窗口<==放进= =组件(x窗口) JDialog->创建对象==形成==>对话框
2.1JFrame常用方法
JFrame(String s) | 创建标题为s的窗口 | |
public void setBound(int a,int b,int width,int height) | (a,b)设置窗口具体位置,即距屏幕左面a个像素....,width为窗口宽,height为高 | |
public void setSize(int width,int height) | 设置窗口大小 | |
public void setLocation(int x,int y) | 设置窗口位置 | |
public void setVisible(boolean b) |
设置窗口是否可见,默认不可见 | |
public void setResizable(boolean b) | 设置窗口是否可调整大小,默认可以 | |
public void dispose() | 撤销当前窗口,并释放当前窗口所使用的资源 | |
public void setDefaultCloseOperation(int operation) | 设置右上角关闭图标 | operation取值 DO_NOTHING_ON_CLOSE(什么不做) HIDE_ON_CLOSE(隐藏当前窗口) DISPOSE_ON_CLOSE(隐藏当前窗口并释放窗口使用的其他资源) EXIT_ON_CLOSE(结束窗口所在应用程序) |
2.2菜单条、菜单、菜单项
菜单条由JMenuBar类创建,菜单由JMenu类创建、菜单项由JMenuItem类创建,嵌入子菜单由JMenu类(JMenuItem的子类)创建
菜单条(菜单(子菜单(菜单项)+菜单项))
菜单上的图标:Icon icon=new Imagelcon(“a.gif”),Icon声明一个图标,使用其子类ImageIcon类创建一个图标
3.1常用容器
3.1.1IPanel面板(默认FlowLayout布局)
组件==添加==>面板==添加==>容器
JTabbedPane选项卡窗格 | 创建JTabbedPane容器:public JTabbedPane(int tabPlacement)(tabPlacement确定选项卡位置) | 一个选项卡对应一个组件 | add(String text,Component c)(把组件c1添加到JTabbedPane中,并指定和组件c对应的选项卡的文本提示是text) | |
滚动窗口JScrollPane | 只能添加一个组件,通过滚动条观看组件 | JTextArea(文本框)不自带滚动条,JScrollPane scroll=new JScrollPane(new JTextArea()) | ||
拆分窗口JSplitPane | JSplitPane(int a,Component b,Component c) JSplitPane(int a,boolean b,Component c,Component d) |
a:HORIZONTAL_SPLIT(水平)||VVERTICAL_SPLIT(垂直) |
拆分成两部分(左右||上下) | |
b决定当拆分线移动时,组件是否连续变化 | ||||
JLayeredPane分层窗口 | add(JComponent com,int layer)(layer指定组件com所在层) |
3.1.2常用布局
设置布局:setLayout(布局对象)
FlowLayout布局(FlowLayout()) | 从左到右排列居中对齐 | 组件调用public void setPreferredSize(Dimension preferredSize) |
BorderLayout布局 | 分为东南西北中五个区域(中间的区域最大) 组件会被替换 |
容器.add(组件,BorderLayout.CENTER/NORTH/SOUTH/WEST/EAST) |
CardLayout布局 | 先来在上,依次向下排序 | a.CardLayout card=new CardLayout()(创建CardLayout对象作为布局) b.con.setLayout(card)(使用容器的setLayout()方法为容器设置布局) c.con.add(String s,Component b)(将b加入容器,s是代号) d.card.show(con,s)(显示容器con中组件代号为s的组件) |
GridLayout布局 | 顺序放在网格(网格大小相同,组件与其大小也相同),最多添加m*n个组件 | |
null布局 | setBounds(int a,int b,int width,int height)(有绝对定位) |
位置不会随对话框大小变化 |
BoxLayout布局 | 盒式容器(行列形容器) |
4.处理事件
4.1事件处理模式
事件源 | 能够产生事件的对象 |
监视器 | 对对象的事件源进行监视(addActionListener(监视器)) |
处理事件的接口 | 监视器对象的类声明实现相应的接口,以便事件源出发监视器时监视器可以调用接口方法处理事件 |
4.2事件
ActionEvent事件 | ItemEvent事件 | DocumentEvent事件 | MouseEvent事件 | 焦点事件 | 键盘事件 | |
事件源 | 文本框、按钮、菜单项、密码框、单选框 |
选项框、下拉列表 | 文本区 | 任何组件 | 组件 | 按下、释放或敲击键盘 |
注册监视器 | addActionListener(ActionListener listener) | addItemListener(ItemListener listen) | addDocumentListener(DocumentListener listen) |
addMouseListener(MouseListener listener) | addFocusListener(FocusListener listener) | |
接口 | 在java.awt.event包中,事件被触发,监视器.actionPerformed(ActionEvent e)处理事件 |
在java.awt.event包中,事件被触发,监视器.itemStateChanged(ItemEvent e)处理事件 | 接口方法:a.public void changedUpdate(DocumentEvent e) b.public void removeUpdate(DocumentEvent e) c.public void insertUpdate(DocumentEvent e) |
处理的事件:(在事件源上)a.按下鼠标 b.释放鼠标 c.单击鼠标 d.鼠标进入(退出)事件源 |
接口方法:a.public void focusGained(FocusEvent e) b.public void focusLost(FocusEvent e) |
接口方法:a.public void keyPressed(KeyEvent e) b.public void keyTyped(KeyEvent e) c.public void KeyReleased(KeyEvent e) |
方法 | a.public Object getSourse() b.public String getActionCommand() |
ItemEvent事件对象.getSource()||getItemSelectable()返回ItemEvent事件的事件源 | a.getX/y()获取鼠标在事件源坐标系中的x/y坐标 b.getModiifiers()获取鼠标的左键或右键 c.getCilckCount()获取鼠标被单击的次数 d.getSourse()获取发生鼠标事件的事件源 |
public boolean requestFocusInWindow()获取输入焦点 | public int getKeyCode()判断哪个键被按下、释放或敲击 |
4.3事件总结
4.3.1授权模式
事件源调用方法将某个对象注册为自己的监视器
4.3.2接口回调
当事件源发生时接口立马回调被类实现的接口中的某个方法
4.3.3方法绑定
监视器必须绑定某个方法来处理事件
4.3.4保持松耦合
尽量让事件源所在的类和监视器是组合关系
2.使用MVC结构
模型(M):存储数据的对象
视图(V):为模型提供数显示的对象
控制器(C):处理用户交互操作,对于用户的操作作出响应,让模型和视图进行必要的交互,即通过视图修改,获取模型的数据;当模型中的数据变化时,让视图显示。
6.对话框
有模式对话框:当对话框处于激活状态,只能让程序响应对话框,且将阻塞其他线程执行,用户不能激活对话框所在程序的其他窗口,直到对话框消失不见
消息对话框 | 输入对话框 | 确认对话框 | 颜色对话框 | 自定义对话框 | |
有模式 | 有模式(有输入文本的文本框、确认和取消按钮) | 有模式 | |||
静态方法 | public static void showMessageDialog(Component parentComponent,String message,String title,int messageType) | public static void showInputDialog(Component parentComponent,Object message,String title,int messageType) | public static void showConfirmtDialog(Component parentComponent,Object message,String title,int messageType) | public static Color showDialog(Component component,String title,Color initialColor) | a.JDialog() b.JDialog(JFrame owner) |
解释 | parentComponent:可见对话框的位置 message:对话框显示的信息 title:对话框标题 messageType:外观 |
parentComponent:指定对话框依赖的组件(parentComponent为null时,组件在屏幕正方显示) message:对话框提示的信息 title:对话框标题 messageType:外观 |
parentComponent:指定对话框可见位置(parentComponent为null时,组件在屏幕方显示) message:对话框提示的信息 title:对话框标题 messageType:外观 |
component:对话框可见位置 title:对话框标题 initialColor:颜色对话框返回的初始颜色 |
a.构造一个无标题的始终不可见的对话框 b.构造一个无标题的始终不可见的无模式的对话框(owmer是对话框依赖的窗口,owner为null时,对话框依赖一个默认不可见的窗口) |
7.树组件和表格组件
JTree类的对象称为树组件
树组件 | 表格组件 | |
DefaultMutableTreeNode类实现了MutableTreeNode接口 所以DefaultMutableTreeNode创建的对象可以成为树上的结点 |
以行和列的形式显示数据 | |
构造方法 | a.DefaultMutableTreeNode(object userObject) b.DefaultMutableTreeNode(object userObject,boolean allowChildren) |
a.JTable()创建默认的表格模型 b.JTable(int a,int b)创建a行b列的默认模式表格 c.JTable(Object data[][],Object columnName[])创建默认表格模式对象,并显示由data指定的二维数组的值,其列名由数组colunmnName指定 d.刷新表格显示:表格.repaint() |
解释 | a.默认有子节点,用add()添加其他结点作为它的子节点 一个结点可以使用setAllowsChildren(boolean b)设置是否允许有子节点 |
|
事件 | addTreeSelectionListener(TreeSelectionListener listener)获得监视器 | |
接口方法:public void valueChanged(TreeSelectionEvent e) | ||
树使用getLastSelectionPathComponent()获取选中的结点 |
8.按钮绑定到键盘
8.1AbstractAction类和特殊的监控器
按钮绑定键盘操作:将按钮绑定到敲击某个键
监视器:创建监视器的类必须实现ActionListener接口的子接口Action
8.2指定监视器的步骤
获取输入映射 | 按钮调用public final InputMap getInputMap(int condition)返回一个InputMap对象 |
绑定按钮的键盘操作 | 返回的映射调用public void put(KeyStroke keystroke,Object actionMapKey)将敲击键盘上的某键指定为按钮的键盘操作 |
为按钮的键盘操作指定监视器 | 按钮调用public final ActionMap getActionMap()返回一个ActionMap对象 ActionMap actionMap=button.getActionMap(); actionMap.调用public void put(Object key,Action action)为按钮的键盘操作指定监视器(实现敲击键盘上的键通知监视器 |
9.打印组件
步骤:
获取ToolKit对象 | 组件调用getToolkit()返回系统提供的Toolkit对象的引用 |
获得PrintJob对象 | getPrintJob(Frame f,String s,null)获取PrintJob对象 |
获取Graphics对象 | PrintJob对象使用getGraphics()获取Graphiics对象 |
打印组件 | 组件调用paintAll(Graphics对象)打印该组件及其子组件 |
打印位置 | 为避免打印覆盖,Graphics对象可以使用(Graphics类中方法)translate(int x,int y)改变组件在打印页的打印位置 |
教材学习中的问题和解决过程
菜单条、菜单、菜单项之间使用add()方法时添加和被添加的对象分不清楚:通过读例题分析操作的过程
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
目标 | 5000行 | 20篇 | 400小时 | 会用java语言独立设计程序 |
第一周 | 13/13 | 1/1 | 5/5 | 学会使用jdk以及对java源程序语句的基本注意事项有所了解 |
第二周 | 140/143 | 1/2 | 10/15 | 学会java基本数据类型与数组和c语言/c++在表达和用法上的相同/不同之处 |
第三周 | 276/419 | 1/3 | 20/35 | java中运算符,表达式和语句的表现形式,类的声明,定义方法 |
第四周 | 600/1019 | 1/4 | 30/45 | 类和对象 |
第五周 | 150/1169 |
1/5 | 10/55 | 继承的作用,子类和父类的继承性,子类继承父类后方法的访问权限以及各种操作 |
第六周 | 100/1269 | 1/6 | 8/63 | 接口定义、使用方法和作用 |
第七周 | 100/1369 | 1/7 | 9/72 | 内部类(独有)包含匿名类和异常类(检测)的使用方法和作用 |
第八周 | 150/1869 | 1/8 | 10/82 | java常用实用类和方法 |
第九周 | 100/1969 | 1/9 | 20/102 | 组件、容器、窗口、(如何处理事件:事件源,监视器、接口) |
参考文献
《java2实用教程(第5版)》