java-高级图形用户界面组.ppt

上传人:小飞机 文档编号:6509179 上传时间:2023-11-07 格式:PPT 页数:44 大小:530.50KB
返回 下载 相关 举报
java-高级图形用户界面组.ppt_第1页
第1页 / 共44页
java-高级图形用户界面组.ppt_第2页
第2页 / 共44页
java-高级图形用户界面组.ppt_第3页
第3页 / 共44页
java-高级图形用户界面组.ppt_第4页
第4页 / 共44页
java-高级图形用户界面组.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《java-高级图形用户界面组.ppt》由会员分享,可在线阅读,更多相关《java-高级图形用户界面组.ppt(44页珍藏版)》请在三一办公上搜索。

1、Swing高级组件,NCEPU,Swing的高级组件,树JTree,表格JTable,NCEPU,Swing的高级组件表格,JTable(表格)的主要功能是把数据以二维表格的形式显示出来。,数据,标题,NCEPU,表格(JTable)的构造方法,NCEPU,Swing常用的组件表格(JTable),JTable类常用的方法有:getModel()/获得表格的数据来源对象JTable(TableModel dm)/dm对象中包含了表格要显示的数据,NCEPU,下列两个构造方法,第一个参数是数据,第二个参数是表格第一行中显示的内容JTable(objectrowData,objectcolumnN

2、ams);JTable(VectorrowData,VectorcolumnNams);,表格(JTable),NCEPU,简单表格,JTable(Object rowData,ObjectcolumnNames)以一个默认表格模型来构建一个表格参数:rowData表格中的单元格数据 columnNames列标题构建表格数据Object data=陈峰,男,new Integer(19),党员,田一飞,男,new Integer(18),团员,胡锦,女,new Integer(19),党员;构建表格的列标题String columnName=姓名,性别,年龄,政治面貌;,建立带滚动条的表格JT

3、able table=new JTable(data,columnName);JScrollPane pane=new JScrollPane(table);,import javax.swing.*;import java.awt.event.*;class Table public static void main(String args)Object data=陈峰,男,new Integer(19),党员,田一飞,男,new Integer(18),团员,胡锦,女,new Integer(19),党员;String columnName=姓名,性别,年龄,政治面貌;JTable tab

4、le=new JTable(data,columnName);table.setRowHeight(25);/设置行高JScrollPane pane=new JScrollPane(table);/添加滚动条JFrame f=new JFrame();f.setSize(300,200);f.add(pane);f.setVisible(true);,简单表格实例,NCEPU,表格JTable的数据模型,JTable只能显示数据,通常将数据的存储和处理任务委托给他的表格数据模型来处理。表格数据模型必须实现TableModel接口。AbstractTableModel类对TableModel接

5、口中大部分方法提供了具体实现。如继承该类,需要对其中若干方法进行实现。DefaultTableModel类继承了AbstractTableModel类并且实现了AbstractTableModel类中没有实现的方法。因此可以使用DefaultTableModel类来处理表格。以上两个类包含在包中。,NCEPU,JTable的创建,生成一个TableModel类型的对象来表示数据。用TableModel创建JTable对象。在JTable中添加滚动条面板。,创建JTable表格可按四步进行:,从AbstractTableModel类中继承得到,getColumnCount,getRowCount

6、,getValueAt和getColumnName方法必须重写,继承DefaultTableModel类或创建DefaultTableModel类的对象得到,NCEPU,DefaultTableModel类,import javax.swing.*;import java.awt.event.*;import javax.swing.table.*;class Table public static void main(String args)Object data=陈峰,男,new Integer(19),党员,/表格中数据田一飞,男,new Integer(18),团员,胡锦,女,new

7、Integer(19),党员;String columnName=姓名,性别,年龄,政治面貌;/表格列标题DefaultTableModel tableModel=new DefaultTableModel(data,columnName);JTable table=new JTable(tableModel);/创建表格table.setRowHeight(25);/设置行高JScrollPane pane=new JScrollPane(table);/添加滚动条JFrame f=new JFrame();f.setSize(300,200);f.add(pane);f.setVisibl

8、e(true);,应用DefaultTableModel创建表格,NCEPU,AbstractTableModel类,import javax.swing.*;import java.awt.event.*;import javax.swing.table.*;class TableModel extends AbstractTableModel/数据模型类Object data=陈峰,男,new Integer(19),党员,田一飞,男,new Integer(18),团员,胡锦,女,new Integer(19),党员;String columnName=姓名,性别,年龄,政治面貌;pub

9、lic int getColumnCount()/获得列数 return columnName.length;public int getRowCount()/获得行数 return data.length;public Object getValueAt(int row,int col)/获得某单元格 return datarowcol;public String getColumnName(int col)/获得某列列标题 return columnNamecol;,继承AbstractTableModel类创建表格,NCEPU,class TableDemopublic static v

10、oid main(String args)TableModel tm=new TableModel();JTable table=new JTable(tm);table.setRowHeight(25);/设置行高JScrollPane pane=new JScrollPane(table);/添加滚动条JFrame f=new JFrame();f.setSize(300,200);f.add(pane);f.setVisible(true);,继承AbstractTableModel类创建表格,续上页,NCEPU,无法编辑单元格解决方法1)覆盖AbstractTableModel抽象类中

11、的isCellEditable()方法,设置允许编辑单元格。public boolean isCellEditable(int rowIndex,int columnIndex)return true;2)覆盖AbstractTableModel抽象类中的setValueAt()方法,将改过的值存入表格中。public void setValueAt(Object value,int row,int col)datarowcol=value;fireTableCellUpdated(row,col);,继承AbstractTableModel类创建表格的问题,继承AbstractTableMo

12、del类创建可编辑的表格,import javax.swing.*;import java.awt.event.*;import javax.swing.table.*;import java.awt.*;class TableModel extends AbstractTableModel/表格模型类Object data=陈峰,男,new Integer(19),党员,田飞,男,new Integer(18),团员,胡锦,女,new Integer(19),党员;String columnName=姓名,性别,年龄,政治面貌;public int getColumnCount()retur

13、n columnName.length;public int getRowCount()return data.length;public Object getValueAt(int row,int col)return datarowcol;public String getColumnName(int col)return columnNamecol;public boolean isCellEditable(int rowIndex,int columnIndex)return true;public void setValueAt(Object value,int row,int co

14、l)datarowcol=value;fireTableCellUpdated(row,col);,class TableDemo implements ActionListener/表格类JTable table;JButton b;TableModel tm;TableDemo()tm=new TableModel();table=new JTable(tm);table.setRowHeight(25);/设置行高JScrollPane pane=new JScrollPane(table);/添加滚动条JFrame f=new JFrame();f.setSize(300,200);f

15、.add(pane);f.setVisible(true);b=new JButton(“显示”);/用于显示数据的更新情况f.add(b,BorderLayout.SOUTH);b.addActionListener(this);,public void actionPerformed(ActionEvent e)/当改变表格中的数据时,data数组的数据同步改变for(int i=0;itm.getRowCount();i+)for(int j=0;jtm.getColumnCount();j+)System.out.printf(%-20s,tm.dataij);System.out.p

16、rintln();public static void main(String args)new TableDemo();,续上页,NCEPU,JTable的选择模式,选中表格的某行可以引发ListSelectionEvent事件。在事件处理之前,应通过setSelectionMode()方法设置选中模式。static int SINGLE_SELECTION(默认值)static int SINGLE_INTERVAL_SELECTION static int MULTIPLE_INTERVAL_SELECTION 分别可让用户作单一选择,连续区间选择与多重选择.当用户作后面两个模式的操作时

17、,应配合Shift键或Ctrl键。,import javax.swing.*;import java.awt.event.*;import javax.swing.table.*;class table public static void main(String args)Object data=陈峰,男,new Integer(19),党员,田一飞,男,new Integer(18),团员,胡锦,女,new Integer(19),党员;String columnName=姓名,性别,年龄,政治面貌;DefaultTableModel tableModel=new DefaultTable

18、Model(data,columnName);JTable table=new JTable(tableModel);/设置行选中模式 table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);JScrollPane pane=new JScrollPane(table);JFrame f=new JFrame();f.setSize(300,200);f.add(pane);f.setVisible(true);,设置表格的行选中模式1,import javax.swing.*;import java.awt

19、.event.*;import javax.swing.table.*;class table public static void main(String args)Object data=陈峰,男,new Integer(19),党员,田一飞,男,new Integer(18),团员,胡锦,女,new Integer(19),党员;String columnName=姓名,性别,年龄,政治面貌;DefaultTableModel tableModel=new DefaultTableModel(data,columnName);JTable table=new JTable(tableMo

20、del);/取得table的ListSelectionModelListSelectionModel selectionMode=table.getSelectionModel();/设置行选中模式selectionMode.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);JScrollPane pane=new JScrollPane(table);JFrame f=new JFrame();f.setSize(300,200);f.add(pane);f.setVisible(true);,设置表格的行选中模

21、式2,NCEPU,将JTable中的数据显示在JTextField等组件中,int trow=jTable.getSelectedRow();String id=(String)dtm.getValueAt(trow,0);String name=(String)dtm.getValueAt(trow,1);String sex=(String)dtm.getValueAt(trow,2);String age=(String)dtm.getValueAt(trow,3);jTextFieldId.setText(id);jTextFieldName.setText(name);jTextFi

22、eldAge.setText(age);jComboBox.setSelectedItem(sex);,NCEPU,行选中事件ListSelectionEvent,选中表格的某行可以引发ListSelectionEvent事件。要处理行选中事件,需实现ListSelectionListener接口ListSelectionListener接口中只有一个方法 void valueChanged(ListSelectionEvente)每当选择值发生更改时调用。,NCEPU,表格的基本操作,增加一行 删除一行 增加一列 删除一列,NCEPU,树的概念,树状结构是由很多节点组成的。每个节点既可以是树

23、叶,也可以是子节点。每个节点(根节点除外)只有一个父节点。一个树状结构只有一个根节点。有时你可能拥有一个树的集合,每个树都有它自己的根节点。这种集合称为树林,父节点,节点,根,树叶,子节点,树,树林,NCEPU,程序中使用的树状结构,NCEPU,树JTree,创建一棵树结构的一般步骤为:创建根节点。DefaultMutableTreeNode treeRoot=new DefaultMutableTreeNode();创建根节点下级各个层次的子结点。DefaultMutableTreeNode subNode=new DefaultMutableTreeNode();,NCEPU,树JTree

24、,用add()方法将各类子节点添加到其父节点中去,节点添加的顺序就是将来显示给用户的顺序。parentNode.add(subNode);将根节点的所有子结点顺次添加到根节点中去。treeRoot.add(subNode);用根节点做参数,调用JTree类的构造方法生成树结构对象。JTree treeObject=new JTree(treeRoot);,import javax.swing.*;import javax.swing.tree.*;import javax.swing.event.*;class TreeDemo extends JFrame implements TreeSe

25、lectionListenerJTree tree;public TreeDemo()setTitle(JTree Demo);/生成树型结构 DefaultMutableTreeNode top=new DefaultMutableTreeNode(中国历史文化名城);createNodes(top);tree=new JTree(top);,private void createNodes(DefaultMutableTreeNode top)DefaultMutableTreeNode node1=new DefaultMutableTreeNode(北京);DefaultMutable

26、TreeNode node2=new DefaultMutableTreeNode(南京);DefaultMutableTreeNode node3=new DefaultMutableTreeNode(曲阜);top.add(node1);top.add(node2);top.add(node3);DefaultMutableTreeNode leaf=new DefaultMutableTreeNode(长城);node1.add(leaf);leaf=new DefaultMutableTreeNode(故宫);node1.add(leaf);leaf=new DefaultMutabl

27、eTreeNode(颐和园);node1.add(leaf);leaf=new DefaultMutableTreeNode(“长江大桥);node2.add(leaf);leaf=new DefaultMutableTreeNode(“中山陵);node2.add(leaf);leaf=new DefaultMutableTreeNode(“夫子庙);node2.add(leaf);leaf=new DefaultMutableTreeNode(孔府);node3.add(leaf);leaf=new DefaultMutableTreeNode(孔庙);node3.add(leaf);le

28、af=new DefaultMutableTreeNode(孔林);node3.add(leaf);,/设置树的选中方式 tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);/设置树形结构父节点和叶子结点的图标 DefaultTreeCellRenderer renderer=new DefaultTreeCellRenderer();renderer.setClosedIcon(new ImageIcon(01.gif);renderer.setLeafIcon(new Ima

29、geIcon(02.gif);tree.setCellRenderer(renderer);/注册监听器 tree.addTreeSelectionListener(this);/把树放到带滚动条的面板上 JScrollPane treeView=new JScrollPane(tree);add(treeView);this.setSize(300,250);setVisible(true);,public static void main(String args)new TreeDemo();/实现树形结构监听器中的方法 public void valueChanged(TreeSelec

30、tionEvent e)DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();if(node=null)return;,NCEPU,树JTree,【例】用JTree组件展示图所示的树型结构的信息。,树JTree,树状结构中所有的构成元素都用结点(Node)来表示。处于不同层次的结点之间具有父子或祖先与后代的关系。处于整个层次结构最顶端的结点称为根结点,每棵树的根结点只能有一个。当一个结点不再有子结点时,称之为终端结点或叶子结点(Leaf Node)。,利用树结点创建树结构的

31、步骤,创建根结点 DefaultMutableTreeNode treeRoot=new DefaultMutableTreeNode();创建根结点下级各个层次的子结点 DefaultMutableTreeNode subNode=new DefaultMutableTreeNode();用add()方法将各类子结点添加到其父结点中去,结点添加的顺序就是将来显示给用户的顺序 parentNode.add(subNode);将根结点的所有子结点顺次添加到根结点中去。treeRoot.add(subNode);用根结点做参数,调用JTree类的构造方法生成树结构对象。JTree treeObje

32、ct=new JTree(treeRoot);将树加到滚动窗格,将滚动窗格加到容器中。,树JTree,用JTree组件展示图所示的树型结构的信息。,import java.awt.*;import javax.swing.*;import javax.swing.tree.*;class TreeDemo public TreeDemo()JFrame f=new JFrame(TreeDemo);Container contentPane=f.getContentPane();/创建根结点 DefaultMutableTreeNode root=new DefaultMutableTreeN

33、ode(“资源管理器”);/创建子结点 DefaultMutableTreeNode node1=new DefaultMutableTreeNode(我的公文包);DefaultMutableTreeNode node2=new DefaultMutableTreeNode(我的电脑);DefaultMutableTreeNode node3=new DefaultMutableTreeNode(收藏夹);DefaultMutableTreeNode node4=new DefaultMutableTreeNode(Readme);root.add(node1);/装配结点 root.add

34、(node2);root.add(node3);root.add(node4);,DefaultMutableTreeNode leafnode=new DefaultMutableTreeNode(公司文件);node1.add(leafnode);leafnode=new DefaultMutableTreeNode(私人文件);node1.add(leafnode);leafnode=new DefaultMutableTreeNode(本机磁盘(C:);node2.add(leafnode);leafnode=new DefaultMutableTreeNode(本机磁盘(D:);no

35、de2.add(leafnode);leafnode=new DefaultMutableTreeNode(本机磁盘(E:);node2.add(leafnode);DefaultMutableTreeNode node31=new DefaultMutableTreeNode(网站列表);node3.add(node31);leafnode=new DefaultMutableTreeNode(奇摩站);node31.add(leafnode);leafnode=new DefaultMutableTreeNode(职棒消息);node31.add(leafnode);leafnode=ne

36、w DefaultMutableTreeNode(网络书店);node31.add(leafnode);,续上页,JTree tree=new JTree(root);JScrollPane scrollPane=new JScrollPane(tree);contentPane.add(scrollPane);f.pack();f.setVisible(true);public static void main(String args)new TreeDemo();,续上页,使用JTree类的getSelectionPath方法获得一个TreePath对象。通过调用这个对象的getLastP

37、athComponent方法,可以找到树中当前选定的结点。TreePath selectionPath=tree.getSelectionPath();DefaultMutableTreeNode selectedNode=(DefaultMutableTreeNode)selectionPath.getLastPathComponent();更简洁的形式:DefaultMutableTreeNode selectedNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();,树路径TreePath,监听树的TreeSel

38、ectionEvent,在JTree上点选任何结点,都会触发TreeSelectionEvent事件。通过调用tree.getLastSelectedPathComponent方法,获取当前选中结点。要处理树的选择事件,必须实现TreeSelectionListener接口。该接口中只有一个方法:void valueChanged(TreeSelectionEvent event);每当用户选定或者撤销选定树的结点时,就要调用它。将监听器添加给树:tree.addTreeSelectionListener(listener);,树选择事件实例,单击某结点后,在右侧显示该结点名称及树路径,事件处

39、理代码,class TreeDemo implements TreeSelectionListener public TreeDemo()public void valueChanged(TreeSelectionEvent e)/当选中某结点时,显示该结点的路径信息 TreePath selectionPath=tree.getSelectionPath();l1.setText(selectionPath.toString();/当选中某结点时,显示该结点信息 DefaultMutableTreeNode selectedNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();l2.setText(selectedNode.toString();public static void main(String args)new TreeDemo();,作业,当点击左侧窗格中的某班级结点时,在右侧将显示此班级的学生信息表格。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号