java中的swing常用组件讲解Word下载.docx

上传人:b****1 文档编号:4772111 上传时间:2023-05-04 格式:DOCX 页数:13 大小:22.92KB
下载 相关 举报
java中的swing常用组件讲解Word下载.docx_第1页
第1页 / 共13页
java中的swing常用组件讲解Word下载.docx_第2页
第2页 / 共13页
java中的swing常用组件讲解Word下载.docx_第3页
第3页 / 共13页
java中的swing常用组件讲解Word下载.docx_第4页
第4页 / 共13页
java中的swing常用组件讲解Word下载.docx_第5页
第5页 / 共13页
java中的swing常用组件讲解Word下载.docx_第6页
第6页 / 共13页
java中的swing常用组件讲解Word下载.docx_第7页
第7页 / 共13页
java中的swing常用组件讲解Word下载.docx_第8页
第8页 / 共13页
java中的swing常用组件讲解Word下载.docx_第9页
第9页 / 共13页
java中的swing常用组件讲解Word下载.docx_第10页
第10页 / 共13页
java中的swing常用组件讲解Word下载.docx_第11页
第11页 / 共13页
java中的swing常用组件讲解Word下载.docx_第12页
第12页 / 共13页
java中的swing常用组件讲解Word下载.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java中的swing常用组件讲解Word下载.docx

《java中的swing常用组件讲解Word下载.docx》由会员分享,可在线阅读,更多相关《java中的swing常用组件讲解Word下载.docx(13页珍藏版)》请在冰点文库上搜索。

java中的swing常用组件讲解Word下载.docx

*'

)。

可以使用setEchoChar(charc)方法来改变缺省的回显字符。

  需要注意的是,取得文本框中的文本时,使用方法getText(),该方法返回的是一个String类型的对象;

而要取得密码框中的文本,使用方法getPassword(),该方法返回的是一个char数组。

  例如,创建了一个密码框:

  JPasswordFieldtxtPwd=newJPasswrodField(20);

  设定该密码框的回显字符为'

#'

:

  txtPwd.setEchoChar('

  取得密码框中的内容:

  char[]pwd=txtPwd.getPassword();

  也可以方便地将char数组转化为String类型的对象:

  StringpwdStr=newString(txtP.getPassword());

  3.菜单

  

(1)菜单也是一种常用的GUI组件,菜单采用的是一种层次结构,最顶层是菜单栏(JMenuBar);

在菜单栏中可以添加若干个菜单(JMenu),每个菜单中又可以添加若干个菜单选项(JMenuItem)、分隔线(Separator)或是菜单(称之为子菜单)。

  

(2)构建应用程序的菜单时,先创建一个菜单栏:

  JMemuBarmenuBar=newJMenuBar();

  通常使用框架的setJMenuBar(JMenuBaraMenuBar)方法将菜单栏置于框架中:

  frame.setJMenuBar(menuBar);

  随后,创建所需要的各菜单并逐个添加到菜单栏中,例如:

  JMenumenuDBAccount=newJMenu("

电表出帐(C)"

  ...

  JMenumenuSysConfig=newJMenu("

系统设置(X)"

  menuBar.add(menuDBAccount);

  menuBar.add(menuSysConfig);

  最后,向各个菜单中添加菜单选项、分隔线或是子菜单,如图所示的系统设置菜单为例:

  //创建菜单选项或是子菜单

  JMenuItemsysConfigItem=newJMenuItem("

参数设置(S)..."

  JMenuviewMenu=newJMenu("

外观设置"

  JRadioButtonMenuItemmetalItem=newJRadioButtonMenuItem("

金属外观"

  JRadioButtonMenuItemclassicItem=newJRadioButtonMenuItem("

传统外观"

  JRadioButtonMenuItemmodernItem=newJRadioButtonMenuItem("

现代外观"

  JMenuItemcascadeItem=newJMenuItem("

层叠窗口(C)"

  JMenuItemiconifyItem=newJMenuItem("

排列图标(I)"

  //将三个单选按钮添加到一个按钮组

  ButtonGroupgroup=newButtonGroup();

  group.add(metalItem);

  group.add(classicItem);

  group.add(modernItem);

  //构建子菜单

  viewMenu.add(metalItem);

  viewMenu.add(classicItem);

  viewMenu.add(modernItem);

  //添加到系统设置菜单

  menuSysConfig.add(sysConfigItem);

//添加菜单选项

  menuSysConfig.add(viewMenu);

//添加子菜单

  menuSysConfig.add(cascadeItem);

  menuSysConfig.addSeaparator();

//添加分隔线

  menuSysConfig.add(iconifyItem);

  (3)通常的菜单选项是JMenuItem,也可以使用复选框或是单选按钮类型的菜单选项,分别是JCheckBoxMenuItem和JRadioButtonMenuItem。

和JRadioButton一样,使用JRadioButtonMenuItem时,需要将它们添加到同一个按钮组中。

  (4)当点击一个菜单选项时,会生成一个动作事件(ActionEvent)。

为菜单选项添加事件侦听器就可以侦听其动作事件,例如:

sysConfigItem.addActionListener(aListener);

  (5)为一个菜单或是菜单选项设置快捷键:

  menuSysConfig.setMnemonic('

X'

  sysConfigItem.setMnemonic('

S'

  (6)如果需要快速选择未打开的菜单中的菜单选项或是子菜单,可以使用加速键。

例如,当希望按下CTRL+L时就立刻选中lockItem菜单选项,而不管lockItem所在的菜单是否已经打开,就可以使用下面的方法为lockItem设置加速键:

  KeyStrokeks=KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK);

  lockItem.setAccelerator(ks);

4.弹出式菜单

  

(1)弹出式菜单(JPopupMenu)是一种特殊的菜单,和普通菜单的区别在于其不固定在菜单栏中,而是可以四处浮动的。

  

(2)下面的语句创建了一个弹出式菜单:

  JPopupMenupopup=newJPopupMenu();

  与向菜单中添加菜单选项、分隔线或是子菜单一样,使用同样的方法向弹出式菜单中添加内容。

  用户可以通过点击某个特殊的鼠标键(称为触发器)来触发弹出式菜单。

例如,在Windows操作系统上,一般是鼠标右键。

  为此,应用程序中应该监听弹出式菜单的父组件的鼠标事件:

当有鼠标事件发生时,使用isPopupTrigger()方法来判断是否为弹出式菜单的触发器;

如果是,则在该父组件上显示出弹出式菜单。

同样以图所示意的弹出式菜单为例,该菜单的父组件是一个显示公司徽标的标签labLogo,当用户在该标签上右击鼠标时,弹出式菜单出现。

下面的代码实现了上述功能:

  labLogo.addMouseListener(newMouseAdapter(){

  publicvoidmouseReleased(MouseEvente){

  if(e.isPopupTrigger()){

  popup.show(labLogo,e.getX(),e.getY());

  }

  });

  5.工具条

  

(1)有些菜单选项的使用频率较高,每次使用都要打开菜单,效率较低。

为此,可以在工具条(JToolBar)中提供与这些菜单选项相对应快捷按钮,以提高用户的效率。

工具条中通常是一些带有图标的按钮,当然也可以是其它类型的GUI组件,例如组合框等等。

  

(2)通常,工具条所提供的操作是菜单所能提供操作的一个子集,目的是能够快速访问那些使用频率高的操作。

  (3)工具条通常被置于布局为BorderLayout的容器中。

工具条被置于布局为BorderLayout的一个面板中。

工具条还有一个特点:

可以被拖动到所在容器其它边界,甚至脱离其所在的容器。

  (4)生成一个工具条对象,可以使用语句:

  JToolBartoolbar=newJToolBar();

  (5)还可以在生成工具条时,指明工具条的标题。

这样,当工具条脱离所在容器时,可以在自己的标题栏显示标题:

  JToolBartoolbar=newJToolBar("

颜色工具条"

  (6)向工具条中添加组件,使用add方法:

  toolbar.add(btnBlue);

  toolbar.add(btnYellow);

  (7)缺省情况下,组件是按照水平方式逐个添加入工具条的,也可以在生成工具条时指明以垂直方式来添加组件:

  JToolBartoolbar=newJToolBar(SwingConstants.VERTICAL);

  (8)如果希望工具条不能移动,可以使用setFloatable方法来设置:

  toolbar.setFloatable(false);

  (9)当工具条中的按钮上只显示图标时,用户可能不能确切知道各个按钮的具体含义。

可以使用工具提示解决这个问题:

  btnYellow.setToolTipText("

面板置为黄色"

  6.对话框

  

(1)对话框是用户和应用程序进行交互(对话)的一个桥梁:

对话框可以用于收集用户的输入数据传递给应用程序,或是显示应用程序的运行信息给用户。

  

(2)对话框分为模式(modal)和非模式两种。

模式对话框处于可见状态时,用户将不能与应用程序的其它窗口进行交互,而非模式对话框则没有此限制。

  (3)Java中提供了一个类JOptionPane用于创建简单的模式对话框,如果希望创建非模式对话框或是自定义对话框可以使用JDialog。

  (4)JOptionPane类中提供了4种静态方法,用以显示4种常用的对话框:

  showMessageDialog消息对话框

  showInputDialog输入对话框

  showConfirmDialog确认对话框

  showOptionDialog选项对话框

  (5)JOptionPane对话框主要由如下几个部分构成:

图标、消息以及按钮。

  (6)类JOptionPane中定义了如下五个常量:

  JOptionPane.QUESTION_MESSAGE

  JOptionPane.INFORMATION_MESSAGE

  JOptionPane.WARNING_MESSAGE

  JOptionPane.ERROR_MESSAGE

  JOptionPane.PLAIN_MESSAGE 

 

//不使用图标

  前四个常量对应着四个图标,第五个常量表示不使用图标。

开发人员可以使用这些常量来指定对话框中显示的图标。

当然,对话框也提供了方法使得开发人员可以使用自己的图标。

  (7)JOptionPane对话框不仅仅可以显示字符串类型的消息,还可以显示其它类型的消息。

例如,可以是一副图片、还可以是一个GUI组件。

更广泛地说,这里的消息可以是任何类型的对象或是对象数组。

在书上的例子中,你可以看到不同类型消息的应用。

  (8)JOptionPane对话框底部的按钮取决于对话框类型和选项类型。

例如,对于确认对话框,可以使用如下的四种选项类型之一:

  DEFAULT_OPTION

  YES_NO_OPTION

  YES_NO_CANCEL_OPTION

  OK_CANCEL_OPTION

  (9)如果设计一个包括两个标签、一个文本输入框、一个密码输入框和两个按钮的登录对话框,这些GUI组件被添加到一个使用了网格袋布局的面板panel中,面板panel又被添加到LoginDialog的内容窗格。

类LoginDialog继承了JDialog,先来看一下LoginDialog的构建器:

  publicLoginDialog(Framef,Strings,booleanb)

  该构建器中包含了3个参数,f和s分别是对话框的父窗口和标题,布尔类型的参数b用来确定对话框的类型,当取值为true时,表示是模式对话框;

取值为false时,表示是非模式对话框。

  7.表格

  

(1)表格(JTable)也是一种常用的GUI组件,常用来显示大量的数据。

  

(2)表格是模型-视图-控制器设计模式的一个典型应用。

表格本身并不存储所显示的数据,数据实际上是存储在表模型中的,表格只是表模型的一种视图.

  (3)JTable提供了如下两种构建器,可以方便地创建简单表格:

  JTable(Object[][]data,Object[]columnNames)

  JTable(Vectordata,VectorcolumnNames)

  (4)采用上述方法可以发现存在不少缺点:

例如,每一列的宽度都是一样的;

未能正确显示日期;

数值未能按照我们的希望保留到小数点后面两位,并靠右显示;

表格中的数据必须预先存放在一个数组中或是向量(Vector)中等等。

在一个真正的应用程序中,使用这样的表格是不能满足实际应用的要求的。

  (5)在缺省情况下,表格中每列是等宽的,并且调整某列的宽度时,其它列的宽度也会相应自动调整。

可以使用下面的语句关闭列宽自动调整特性:

  table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

  之后,要设定某列的宽度,首先依据该列的列名取得列对象,以设定第一列宽度为例:

  TableColumncol=table.getColumn(columnNames[0]);

  然后调用setPreferredWidth方法设定该列宽度:

  col.setPreferredWidth(200);

  (6)前面已经提到,表格有一个对应的表模型,数据是存储在表模型中,表格是表模型的视图。

表格在建立视图时总需要自动调用表模型中的一些方法,这些方法的返回值决定了最终的视图。

部分常需要用到的方法的名称和含义如下:

  publicintgetRowCount();

//取得行数

  publicintgetColumnCount();

//取得列数

  publicObjectgetValueAt(introw,intcolumn);

//取得指定单元格的数据

  //指定单元格是否允许编辑

  publicbooleanisCellEditable(introw,intcolumn);

  publicStringgetColumnName(intcolumn);

//取得指定列的列名

  publicClassgetColumnClass(intcolumn);

  缺省表模型DefaultTableModel提供了上述方法的缺省实现。

例如,DefaultTableModel中的isCellEditable方法总是返回true,表示所有的单元格都允许编辑;

getColumnClass方法总是返回Object.class.

(7)可以使用DefaultTableModel创建一个表模型对象,然后再使用表模型创建表格,例如:

  DefaultTableModelmodel=newDefaultTableModel(0,5);

//0行5列的表模型

  JTabletable=newJTable(model);

  然后,可以使用model的addRow、removeRow方法向表模型中添加或是删除数据,对表模型增删数据的结果会自动反映到表格视图上来。

  但是,通常情况下,我们并不直接使用DefaultTableModel。

更多的情形是继承DefaultTableModel类,并覆盖其中部分方法以达到特殊的要求.

  8.树形控件

  

(1)JTree构造函数:

  A.JTree():

建立一棵系统默认的树。

  B.JTree(Hashtablevalue):

利用Hashtable建立树,不显示rootnode(根节点).

  C.JTree(Object[]value):

利用ObjectArray建立树,不显示rootnode.

  D.JTree(TreeModelnewModel):

利用TreeModel建立树。

  E.JTree(TreeNoderoot):

利用TreeNode建立树。

  F.JTree(TreeNoderoot,booleanasksAllowsChildren):

利用TreeNode建立树,并决定是否允许子节点的存在.

  G.JTree(Vectorvalue):

利用Vector建立树,不显示rootnode.

  

(2)JTree上的每一个节点就代表一个TreeNode对象,TreeNode本身是一个Interface,里面定义了7个有关节点的方法,例如判断是否为树叶节点、有几个子节点(getChildCount())、父节点为何(getparent())等等、这些方法的定义你可以在javax.swing.tree的package中找到,读者可自行查阅javaapi文件。

  (3)在实际的应用上,一般我们不会直接实作此界面,而是采用java所提供的DefaultMutableTreeMode类,此类是实作MutableTreeNode界面而来,并提供了其他许多实用的方法。

  MutableTreeNode本身也是一个Interface,且继承了TreeNode界面此类主要是定义一些节点的处理方式,例如新增节点(insert())、删除节点(remove())、设置节点(setUserObject())等。

整个关系如下图:

  TreeNode----extends--->

MutableTreeNode---implements---DefaultMutableTreeNode

  (4)我们来看如何利DefaultMutableTreeNode来建立JTree,我们先来看DefaultMutableTreeNode的构造函数:

DefaultMutableTreeNode构造函数:

  DefaultMutableTreeNode():

建立空的DefaultMutableTreeNode对象。

  DefaultMutableTreeNode(ObjectuserObject):

建立DefaultMutableTreeNode对象,节点为userObject对象。

  DefaultMutableTreeNode(ObjectuserObject,BooleanallowsChildren):

建立DefaultMutableTreeNode对象,节点为userObject对象并决定此节点是否允许具有子节点。

  (5)除了以节点的观念(TreeNode)建立树之外,你可以用datamodel的模式建立树。

树的datamodel称为TreeModel,用此模式的好处是可以触发相关的树事件,来处理树可能产生的一些变动。

TreeModel是一个interface,里面定义了8种方法;

如果你是一个喜欢自己动手做的人,或是你想显示的数据格式很复杂,你可以考虑直接实作TreeModel界面中所定义的方法来构造出JTree.TreeModel界面的方法如下所示:

  TreeModel方法:

voidaddTreeModelListener(TreeModelListenerl):

增加一个TreeModelListener来监控TreeModelEvent事件。

  ObjectgetChild(Objectparent,intindex):

返回子节点。

  intgetChildCount(Objectparent):

返回子节点数量.

  intgetIndexOfChild(Objectparent,Objectchild):

返回子节点的索引值。

  ObjectgetRoot():

返回根节点。

  booleanisLeaf(Objectnode):

判断是否为树叶节点。

  voidremoveTreeModelListener(TreeModelListenerl):

删除TreeModelListener。

  voidvalueForPathChanged(TreePathpath,ObjectnewValue):

当用户改变Tree上的值时如何应你可以实作出这8种方法,然后构造出自己想要的JTree,不过在大部份的情况下我们通常不会这样做,毕竟要实作出这8种方法不是件很轻松的事,而且java本身也提供了一个默认模式,叫做DefaultTreeModel,这个类已经实作了TreeModel界面,也另外提供许多实用的方法。

利用这个默认模式,我们便能很方便的构造出JTree出来了。

下面为DefaultTreeModel的构造函数与范例:

  DefaultTreeModel构造函数:

  DefaultTreeModel(TreeNoderoot):

建立DefaultTreeModel对象,并定出根节点。

  Defa

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2