java常⽤的组件
java常⽤的组件:
1.标识(Label)
(1) 语法格式: Label(String s)
(2) 功能: 构造⼀个显⽰字符串s的标识。
2.按钮(Button)
(1) 语法格式:Button (String s)
(2) 功能:构造⼀个以字符串s为标识的按钮。
3.复选框(Checkbox)
(1)语法格式: Checkbox (String s)
(2)功能:构造⼀个以字符串s为标识的复选框条⽬,未被选中。
4.单选按钮(Radio Buttons)
(1) 语法格式: CheckboxGroup( )
(2) 功能: 构造⼀个条⽬组。
5.选择菜单(Choice Menu)
(1) 语法格式: Choice ( )
(2) 功能:构造⼀个选择菜单。
(3) 说明:构造完之后,再使⽤Choice类中的addItem⽅法加⼊菜单的条⽬。
6.列表框(Scrolling List) l
(1) 语法格式:List (int n, boolean b)
(2) 功能:构造⼀个有n个列表项的列表框,并根据b的值决定是否允许多选。
7.单⾏⽂本输⼊框(TextField)
(1) 语法格式:TextField (int i)
(2) 功能:构造⼀个字符串长度为i单⾏⽂本输⼊框
8.多⾏⽂本输⼊框(TextArea)
(1) 语法格式: TextArea (int i, int j)
(2)功能: 构造⼀个多⾏⽂本输⼊框,⾏数为i,列数为j
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
在Java1.0中,已经有⼀个⽤于GUI编程的类库AWT(AbstractWindowToolkit),称之为抽象窗⼝⼯具箱。遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使⽤了本地代码(NativeCode),这些组件的创建和⾏为是由应⽤程序所在平台上的本地GUI⼯具来处理的。因此,AWT组件要在不同的平台上提供给⽤户⼀致的⾏为就受到了很⼤的限制。同时,AWT组件中还存在很多bug,这就使得使⽤AWT来开发跨平台的GUI应⽤程序困难重重。
1996年,SUN公司和Netsacpe公司在⼀个称为Swing的项⽬中合作完善了Netsacpe公司原来开发的⼀
套GUI库,也就是现在所谓的Swing组件。Swing组件和原来的AWT组件完全不同,最⼤的区别就是Swing组件的实现中没有使⽤本地代码,这样对底层平台的依赖型就⼤为降低,并且可以给不同平台的⽤户⼀致的感觉。此外,和原来的AWT相⽐,Swing中提供了内容更多、使⽤更为⽅便的组件。
在阅读⼀些书籍时,常会遇到名词JFC(Java FoundationClass)。JFC的概念是在1997年的JavaOne开发者⼤会上⾸次提出的,是指⽤于构建GUI的⼀组API。实际上,Swing只是JFC的⼀部分,其它的还有⼆维图形(Java2D)API以及拖放(Drag andDrop)API等等。
Swing并不是完全取代了AWT,Swing只是使⽤更好的GUI组件(如JButton)代替AWT中相应的GUI组件(如Button),并且增加了⼀些AWT中原来所没有的GUI组件。并且,Swing仍使⽤AWT1.1的事件处理模型。
虽然现在AWT组件仍得到⽀持,但是建议在你的应⽤程序中尽量使⽤Swing组件和1.1的事件模型。
1.标签(JLabel)
标签(JLabel)通常是⽤来标识另外⼀个组件的含义。以在标签上显⽰⽂字、图象或是⽂字图象的组合。
JLabellabText=new JLabel(“⽂本标签”);
labText.setText("⽂本标签");
ImageIconicon = new ImageIcon("image/greenflag20.gif");
JLabellabImage=new JLabel(icon);
labImage.setIcon(icon);
2.密码框(JPasswordField)
密码框实际上是⼀种特殊类型的⽂本框,⽤户可以向其中输⼊⽂本并加以编辑。和⽂本框不同的是,向密码框中输⼊⽂本时,显⽰的不是实际输⼊的⽂本,⽽是特殊的回显字符(通常是'*')。可以使⽤setEchoChar(charc)⽅法来改变缺省的回显字符。
需要注意的是,取得⽂本框中的⽂本时,使⽤⽅法getText(),该⽅法返回的是⼀个String类型的对象;⽽要取得密码框中的⽂本,使⽤⽅法getPassword(),该⽅法返回的是⼀个char数组。
例如,创建了⼀个密码框:
例如,创建了⼀个密码框:
JPasswordField txtPwd=new JPasswrodField(20);
设定该密码框的回显字符为'#':
txtPwd.setEchoChar('#');
取得密码框中的内容:
char []Password();
也可以⽅便地将char数组转化为String类型的对象:
String pwdStr=new Password());
3.菜单
(1)菜单也是⼀种常⽤的GUI组件,菜单采⽤的是⼀种层次结构,最顶层是菜单栏(JMenuBar);在菜单栏中可以添加若⼲个菜单(JMenu),每个菜单中⼜可以添加若⼲个菜单选项(JMenuItem)、分隔线(Separator)或是菜单(称之为⼦菜单)。
(2)构建应⽤程序的菜单时,先创建⼀个菜单栏:
JMemuBar menuBar=new JMenuBar();
通常使⽤框架的setJMenuBar(JMenuBaraMenuBar)⽅法将菜单栏置于框架中:
frame.setJMenuBar(menuBar);
随后,创建所需要的各菜单并逐个添加到菜单栏中,例如:
JMenu menuDBAccount=new JMenu("电表出帐(C)");
...
JMenu menuSysConfig=new JMenu("系统设置(X)");
menuBar.add(menuDBAccount);
...
menuBar.add(menuSysConfig);
最后,向各个菜单中添加菜单选项、分隔线或是⼦菜单,如图所⽰的系统设置菜单为例:
//创建菜单选项或是⼦菜单
JMenuItem sysConfigItem=newJMenuItem("参数设置(S)...");
JMenu viewMenu=new JMenu("外观设置");
JRadioButtonMenuItem metalItem=newJRadioButtonMenuItem("⾦属外观");
JRadioButtonMenuItem classicItem=newJRadioButtonMenuItem("传统外观");
JRadioButtonMenuItem modernItem=newJRadioButtonMenuItem("现代外观");
JMenuItem cascadeItem=new JMenuItem("层叠窗⼝(C)");
JMenuItem iconifyItem=new JMenuItem("排列图标(I)");
//将三个单选按钮添加到⼀个按钮组
ButtonGroup group=new ButtonGroup();
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设置加速键:
KeyStroke ks= KeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK);
KeyStroke ks= KeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK);
lockItem.setAccelerator(ks);
4.弹出式菜单
(1)弹出式菜单(JPopupMenu)是⼀种特殊的菜单,和普通菜单的区别在于其不固定在菜单栏中,⽽是可以四处浮动的。
(2)下⾯的语句创建了⼀个弹出式菜单:
JPopupMenu popup=new JPopupMenu();
与向菜单中添加菜单选项、分隔线或是⼦菜单⼀样,使⽤同样的⽅法向弹出式菜单中添加内容。
⽤户可以通过点击某个特殊的⿏标键(称为触发器)来触发弹出式菜单。例如,在Windows操作系统上,⼀般是⿏标右键。
为此,应⽤程序中应该监听弹出式菜单的⽗组件的⿏标事件:当有⿏标事件发⽣时,使⽤isPopupTrigger()⽅法来判断是否为弹出式菜单的触发器;如果是,则在该⽗组件上显⽰出弹出式菜单。同样以图所⽰意的弹出式菜单为例,该菜单的⽗组件是⼀个显⽰公司徽标的标签labLogo,当⽤户在该标签上右击⿏标时,弹出式菜单出现。下⾯的代码实现了上述功能:
labLogo.addMouseListener(newMouseAdapter(){
public void mouseReleased(MouseEvent e){
if (e.isPopupTrigger()){
popup.show(X(), e.getY());
}
}
});
5.⼯具条
(1)有些菜单选项的使⽤频率较⾼,每次使⽤都要打开菜单,效率较低。为此,可以在⼯具条(JToolBar)中提供与这些菜单选项相对应快捷按钮,以提⾼⽤户的效率。⼯具条中通常是⼀些带有图标的按钮,当然也可以是其它类型的GUI组件,例如组合框等等。htmlradio的text出不来
(2)通常,⼯具条所提供的操作是菜单所能提供操作的⼀个⼦集,⽬的是能够快速访问那些使⽤频率⾼
的操作。
(3)⼯具条通常被置于布局为BorderLayout的容器中。⼯具条被置于布局为BorderLayout的⼀个⾯板中。⼯具条还有⼀个特点:可以被拖动到所在容器其它边界,甚⾄脱离其所在的容器。
(4)⽣成⼀个⼯具条对象,可以使⽤语句:
JToolBar toolbar=new JToolBar();
(5)还可以在⽣成⼯具条时,指明⼯具条的标题。这样,当⼯具条脱离所在容器时,可以在⾃⼰的标题栏显⽰标题:
JToolBar toolbar=new JToolBar("颜⾊⼯具条");
(6)向⼯具条中添加组件,使⽤add⽅法:
toolbar.add(btnBlue);
toolbar.add(btnYellow);
(7)缺省情况下,组件是按照⽔平⽅式逐个添加⼊⼯具条的,也可以在⽣成⼯具条时指明以垂直⽅式来
添加组件:
JToolBar toolbar=new JToolBar(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(Frame f,String s,boolean b)
该构建器中包含了3个参数,f和s分别是对话框的⽗窗⼝和标题,布尔类型的参数b⽤来确定对话框的类型,当取值为true时,表⽰是模式对话框;取值为false时,表⽰是⾮模式对话框。
7.表格
(1)表格(JTable)也是⼀种常⽤的GUI组件,常⽤来显⽰⼤量的数据。
(2)表格是模型-视图-控制器设计模式的⼀个典型应⽤。表格本⾝并不存储所显⽰的数据,数据实际上是存储在表模型中的,表格只是表模型的⼀种视图.
(3)JTable提供了如下两种构建器,可以⽅便地创建简单表格:
JTable(Object[][] data, Object[] columnNames)
JTable(Vector data, Vector columnNames)
(4)采⽤上述⽅法可以发现存在不少缺点:例如,每⼀列的宽度都是⼀样的;未能正确显⽰⽇期;数值未能按照我们的希望保留到⼩数点后⾯两位,并靠右显⽰;表格中的数据必须预先存放在⼀个数组中或是向量(Vector)中等等。在⼀个真正的应⽤程序中,使⽤这样的表格是不能满⾜实际应⽤的要求的。
(5)在缺省情况下,表格中每列是等宽的,并且调整某列的宽度时,其它列的宽度也会相应⾃动调整。可以使⽤下⾯的语句关闭列宽⾃动调整特性:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
之后,要设定某列的宽度,⾸先依据该列的列名取得列对象,以设定第⼀列宽度为例:
TableColumn Column(columnNames[0]);
然后调⽤setPreferredWidth⽅法设定该列宽度:
col.setPreferredWidth(200);
(6)前⾯已经提到,表格有⼀个对应的表模型,数据是存储在表模型中,表格是表模型的视图。表格在建⽴视图时总需要⾃动调⽤表模型中的⼀些⽅法,这些⽅法的返回值决定了最终的视图。部分常需要⽤到的⽅法的名称和含义如下:
public int getRowCount();//取得⾏数
public int getColumnCount();//取得列数
public Object getValueAt(int row, int column);//取得指定单元格的数据
//指定单元格是否允许编辑
public boolean isCellEditable(int row, intcolumn);
public String getColumnName(int column);//取得指定列的列名
public Class getColumnClass(int column);
缺省表模型DefaultTableModel提供了上述⽅法的缺省实现。例如,DefaultTableModel中的isCellEditable⽅法总是返回true,表⽰所有的单元格都允许编辑;getColumnClass⽅法总是返回Object.class.
(7)可以使⽤DefaultTableModel创建⼀个表模型对象,然后再使⽤表模型创建表格,例如:
DefaultTableModel model=newDefaultTableModel(0,5);//0⾏5列的表模型
JTabletable=new JTable(model);
然后,可以使⽤model的addRow、removeRow⽅法向表模型中添加或是删除数据,对表模型增删数据的结果会⾃动反映到表格视图上来。
但是,通常情况下,我们并不直接使⽤DefaultTableModel。更多的情形是继承DefaultTableModel类,并覆盖其中部分⽅法以达到特殊的要求.
8.树形控件
(1)JTree构造函数:
A.JTree():建⽴⼀棵系统默认的树。
B.JTree(Hashtable value):利⽤Hashtable建⽴树,不显⽰rootnode(根节点).
C.JTree(Object[] value):利⽤Object Array建⽴树,不显⽰rootnode.
D.JTree(TreeModel newModel):利⽤TreeModel建⽴树。
D.JTree(TreeModel newModel):利⽤TreeModel建⽴树。
E.JTree(TreeNode root):利⽤TreeNode建⽴树。
F. JTree(TreeNode root,booleanasksAllowsChildren):利⽤TreeNode建⽴树,并决定是否允许⼦节点的存在.
G.JTree(Vector value):利⽤Vector建⽴树,不显⽰rootnode.
(2)JTree上的每⼀个节点就代表⼀个TreeNode对象,TreeNode本⾝是⼀个Interface,⾥⾯定义了7个有关节点的⽅法,例如判断是否为树叶节点、有⼏个⼦节点(getChildCount())、⽗节点为何(getparent())等等、这些⽅法的定义你可以在的package中到,读者可⾃⾏查阅java api⽂件。
(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(Object userObject,BooleanallowsChildren):建⽴DefaultMutableTreeNode对象,节点为userObject 对象并决定此节点是否允许具有⼦节点。
(5)除了以节点的观念(TreeNode)建⽴树之外,你可以⽤datamodel的模式建⽴树。树的datamodel称为TreeModel,⽤此模式的好处是可以触发相关的树事件,来处理树可能产⽣的⼀些变动。TreeModel是⼀个interface,⾥⾯定义了8种⽅法;如果你是⼀个喜欢⾃⼰动⼿做的⼈,或是你想显⽰的数据格式很复杂,你可以考虑直接实作TreeModel界⾯中所定义的⽅法来构造出JTree.TreeModel界⾯的⽅法如下所⽰:
TreeModel⽅法: void addTreeModelListener(TreeModelListenerl):增加⼀个TreeModelListener来监控TreeModelEvent事件。 ObjectgetChild(Object parent,int index):返回⼦节点。
intgetChildCount(Object parent):返回⼦节点数量.
intgetIndexOfChild(Object parent,Objectchild):返回⼦节点的索引值。
ObjectgetRoot():返回根节点。
booleanisLeaf(Object node):判断是否为树叶节点。
voidremoveTreeModelListener(TreeModelListenerl):删除TreeModelListener。
voidvalueForPathChanged(TreePath path,ObjectnewValue):当⽤户改变Tree上的值时如何应你可以实作出这8种⽅法,然后构造出⾃⼰想要的JTree,不过在⼤部份的情况下我们通常不会这样做,毕竟要实作出这8种⽅法不是件很轻松的事,⽽且java本⾝也提供了⼀个默认模式,叫做DefaultTreeModel,这个类已经实作了TreeModel界⾯,也另外提供许多实⽤的⽅法。利⽤这个默认模式,我们便能很⽅便的构造出JTree出来了。下⾯为DefaultTreeModel的构造函数与范例:
DefaultTreeModel构造函数:
DefaultTreeModel(TreeNoderoot):建⽴DefaultTreeModel对象,并定出根节点。
DefaultTreeModel(TreeNode root,BooleanasksAllowsChildren):建⽴具有根节点的DefaultTreeModel对象,并决定此节点是否允许具有⼦节点。
(6)当树的结构上有任何改变时,例如节点值改变了、新增节点、删除节点等,都会TreeModelEvent事件,要处理这样的事件必须实作TreeModelListener界⾯,此界⾯定义了4个⽅法,如下所⽰:TreeModelListener⽅法:
Void treeNodesChanged(TreeModelEvente):当节点改变时系统就会云调⽤这个⽅法。
Void treeNodesInserted(TreeModelEvente):当新增节时系统就会去调⽤这个⽅法。
Void treeNodesRemoved(TreeModeEvente):当删除节点时系统就会去调⽤这个⽅法。
Void treeStructureChanged(TreeModelEvente):当树结构改变时系统就会去调⽤这个⽅法。
(7)TreeModelEvent类本⾝提供了5个⽅法,帮我们取得事件的信息,如下所⽰:TreeModelEvent⽅法:
int[] getChildIndices():返回⼦节点的索引值。
Object[] getChildren():返回⼦节点.
Object[] getPath():返回Tree中⼀条path上(从root nod到leafnode)的节点。
TreePath getTreePath():取得⽬前位置的Tree
Path. String toString():取得蝗字符串表⽰法.
(8)由TreeModelEvent的getTreePath()⽅法就可以得到TreePath对象,此对象就能够让我们知道⽤户⽬前正选哪⼀个节点,TreePath 类最常⽤的⽅法为: public ObjectgetLastPathComponent():取得最深(内)层的节点。
public intgetPathCount():取得此path上共有⼏个节点.
9.JScrollbar滚动条
(1)构造函数
mySlider = new JScrollbar(JScrollbar.HORIZONTAL ,
0 , 1 , 0 , Integer.MAX_VALUE);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论