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 []pwd=txtPwd.getPassword();
     也可以方便地将char数组转化为String类型的对象:
     String pwdStr=new String(txtP.getPassword());
   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.getKeyStroke(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(labLogo,e.getX(), e.getY());
      }
   }  
  });
   5.工具条
   (1)有些菜单选项的使用频率较高,每次使用都要打开菜单,效率较低。为此,可以在工具条(JToolBar)中提供与这些菜单选项相对应快捷按钮,以提高用户的效率。工具条中通常是一些带有图标的按钮,当然也可以是其它类型的GUI组件,例如组合框等等。
   (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 col=table.getColumn(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建立树。
     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())等等、这些方法的定义你可以在javax.swing.tree的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);
    滚动条方向
    滑块初始位置
    滑

你可能感兴趣的:(JAVA,Android)