好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Swing菜单与工具栏.doc

24页
  • 卖家[上传人]:大米
  • 文档编号:536426259
  • 上传时间:2023-11-10
  • 文档格式:DOC
  • 文档大小:421.50KB
  • / 24 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Swing菜单与工具栏JSeparator类JSeparator类是一种特殊的组件,他在JMenu上提供分隔符JPopupMenu与JToolBar类也支持分隔,但是每一个都使用JSeparator类的相应子类除了可以放置在菜单上以外,JSeparator类也可以放置在任何我们希望使用水平或是垂直线来分隔屏幕不同区域的地方JSeparator是一个严格的可视化组件,所以,他没有数据模型两种JSeparator,一种属于JToolBar,一种属于JPopupMenu创建JSeparator组件要为菜单创建一个分隔,我们并不直接创建一个JSeparator,尽管我们可以这样做相反,我们调用JMenu的addSeparator()方法,而菜单会创建分隔符并将其添加为下一个菜单项他是一个JSeparator(不是JMenuItem子类)的事实是隐藏的JMenu还有一个insertSeparator(int index)方法,这个方法可以使得我们在菜单上指定的位置添加分隔,这并不必须是下一个位置如果我们希望在菜单以外使用JSeparator(例如,在布局中分隔两个面板),我们应该使用JSeparator的两个构造函数:public JSeparator()JSeparator jSeparator = new JSeparator();public JSeparator(int orientation)JSeparator jSeparator = new JSeparator(JSeparator.VERTICAL); 这两个构造函数使得我们可以创建一个水平或是垂直分隔。

      如果没有指定方向,则为水平方向如果我们希望显示式指定方向,我们可以使用JSeparator的常量HORIZONTAL或是VERTICALJSeparator属性在我们拥有JSeparator以外,我们就可以像其他的组件一样将其添加到屏幕中组件的初始维度是空的(宽度与高度均为0),所以如果屏幕的布局管理器询问组件的尺寸应是多少,分隔符将会回复他不需要空间另一方面,如果布局管理器提供一定量的空间,如果方向合适则分隔就会使用这个空间例如,将一个水平JSeparator添加到BorderLayout面板的北侧则会在屏幕上绘制一个分隔线然而,如果将水平JSeparator添加到相同面板的东侧则不会绘制任何内容对于垂直JSeparator,其行为则是相反的:北侧将是空的,而在东侧则会出现垂直线表6-7显示了JSeparator的四个属性JSeparator属性属性名 数据类型 访问性accessibleContext AccessibleContext 只读orientation int 读写绑定UI SeparatorUI 读写绑定UIClassID String 只读自定义JSeparator观感预安装的观感类型集合下的JSeparator外观以及其他的菜单组件显示在图6-3中。

      表6-8列出了JSeparator的UIResource相关属性集合对于JSeparator组件,有五个不同的属性JSeparator UIResource元素属性字符串 对象类型Separator.background ColorSeparator.foreground ColorSeparator.insets InsetsSeparator.thickness IntegerSeparatorUI String6.1.7 JPopupMenu类JPopupMenu组件是弹出菜单组件的容器,可以显示在任何地方并且为JMenu所支持当一个编程者定义的触发事件发生时,我们显示JPopupMenu,并且菜单显示所包含的菜单组件与JMenuBar类似,JpopupMenu使用SingleSelectionModel来管理当前被选中的元素创建JpopupMenu组件JPopupMenu有两个构造函数:public JPopupMenu()JPopupMenu jPopupMenu = new JPopupMenu();public JPopupMenu(String title)JPopupMenu jPopupMenu = new JPopupMenu("Welcome"); 如果需要,只有一个函数允许我们初始化菜单标题。

      标题的处理方式会依赖于所安装的观感当前安装的观感会忽略标题向JPopupMenu添加菜项与JMenu类似,一旦我们有了JPopupMenu,我们需要向其添加菜单项;否则,菜单将会是空的有三个JPopupMenu方法可以添加菜单项,一个用于添加分隔符public JMenuItem add(JMenuItem menuItem);public JMenuItem add(String label);public JMenuItem add(Action action);public void addSeparator(); 另外还有一个由Container所继承的add()方法可以用于添加通常的AWT组件:public Component add(Component component);添加菜单项的通常方法是使用第一个add()方法我们独立于弹出菜单创建菜单项,包含其行为行定,然后将其关联到菜单使用第二个add()方法,我们必须将事件处理器关联到由方法返回的菜单;否则,当被选中时菜单并不会响应下面的代码显示了两种方法我们使用哪一种方法完全依赖于我们的喜好可视化编程环境,例如JBuilder,会使用第一种。

      因为第一种方法并不是十分复杂,如果不是全部,绝大多数的程序员应该使用第一种方法JPopupMenu popupenu = new JPopupMenu();ActionListener anActionListener = ...;// The first wayJMenuItem firstItem = new JMenuItem("Hello");firstItem.addActionListener(anActionListener);popupMenu.add(firstItem);// The second wayJMenuItem secondItem = popupMenu.add("World");secondItem.addActionListener(anActionListener); 使用Action来创建与JPopupMenu结合使用的菜单项的方式类似于JMenu然而,依据JPopupMenu类的Javadoc,并不鼓励使用add()方法的Action变体相反,可以将Action传递给JMenuItem的构造函数,或者是使用setAction()方法进行配置,然后将其添加到JPopupMenu。

      为什么这个方法没有被deprecated并不清楚最后,我们可以使用addSeparator()方法添加分隔除了在菜单尾部添加菜单项,我们可以在指定的位置添加菜单项,或者是在指定的位置添加分隔public JMenuItem insert(Component component, int position);public JMenuItem insert(Action action, int position);与JMenu不同,并不存在insertSeparator()方法但是我们可以使用由Container继承的add(Component component, int position)方法如果我们希望移除组件,可以使用JPopupMenu特定的remove(Component component)方法显示JPopupMenu与JMenu不同,简单的组装弹出菜单并不够我们需要将弹出菜单与合适的组件相关联在Swing 5.0版本之前,我们需要添加事件处理代码来触发弹出菜单的显示现在,我们所需要做的就是为我们希望关联弹出菜单的组件调用setComponentPopupMenu()方法当平台特定的触发事件发生时,弹出菜单会自动显示。

      我们只需要简单的创建JPopupMenu的实例,并将其关联到我们希望显示弹出菜单的组件,如下所示:JPopupMenu popupMenu = ...;aComponent.setComponentPopupMenu(popupMenu);对于弹出菜单比较重要的JComponent方法主要有getComponentPopupMenu(), setComponentPopupMenu(), getInheritsPopupMenu(), setInheritsPopupMenu()以及getPopupLocation()方法setInheritsPopupMenu()方法会接受一个boolean参数(ljh: 表示是否使用父容器的PopupMenu)当为true时,并没有直接为组件设置组件弹出菜单,则会查找父容器用于弹出菜单JPopupMenu属性表6-9列出了JPopupMenu的16个属性更多的属性是由JComponent,Container与Component继承的JPopupMenu属性 属性名数据类型访问性accessibleContextAccessibleContext只读borderPaintedboolean读写componentComponent只读invokerComponent只读labelString读写绑定lightWeightPopupEnabledboolean读写marginInsets只读menuKeyListenersMenuKeyListener[]只读popupMenuListenersPopupMenuListener[]只读popupSizeDimension只写selectedComponent只写selectionModelSingleSelectionModel只写subElementsMenuElement[]只读UIPopupMenuUI读写绑定UIClassIDString只读visibleboolean读写JPopupMenu最有趣的属性就是lightWeightPopupEnabled。

      通常来说,JPopupMenu会尝试避免为显示其菜单项而创建新的重量级组件相反,当JPopupMenu可以完整的显示在最外层的窗体框架内时弹出菜单使用JPanel否则,如果菜单项不适合时,JPopupMenu使用JWindow然而,如果我们在不同的窗体层上混合使用轻量级与重量级组件,在一个JPanel内显示弹出菜单并不会起作用,因为在菜单层显示的一个重量级组件会在JPanel之前出现要纠正这种行为,弹出菜单使用Panel用来显示菜单选项默认情况下,JPopupMenu绝不使用Panel如果我们需要允许Panel显示,我们可以在单个的JPopupMenu级别或是整个的Applet或是程序进行配置在单独的弹出级别,只需要将lightWeightPopupEnable属性设置为false在系统级别,可以通过如下的代码进行设置:// From now on, all JPopupMenus wil。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.