加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

实战 Groovy(4)- 添加菜单栏

发布时间:2020-12-14 16:54:47 所属栏目:大数据 来源:网络整理
导读:添加菜单栏 在 Swing 中创建菜单提供另一个具有自然层次结构的组件示例。创建一个? JMenuBar ,它包含一个或多个? JMenu , JMenu ?进而包含一个或多个? JMenuItem 。 为了创建包含? Exit ?菜单项的? File ?菜单,在 Gwitter.groovy 中添加清单 11 中的代码

添加菜单栏

在 Swing 中创建菜单提供另一个具有自然层次结构的组件示例。创建一个?JMenuBar,它包含一个或多个?JMenuJMenu?进而包含一个或多个?JMenuItem

为了创建包含?Exit?菜单项的?File?菜单,在 Gwitter.groovy 中添加清单 11 中的代码:


清单 11. 在 Gwitter 中添加?File?菜单
				
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.*

class Gwitter{   
  static void main(String[] args){
    def gwitter = new Gwitter()
    gwitter.show()
  }
    
  void show(){
    def swingBuilder = new SwingBuilder()  
    
    def customMenuBar = {
      swingBuilder.menuBar{
        menu(text: "File",mnemonic: 'F') {
          menuItem(text: "Exit",mnemonic: 'X',actionPerformed: { dispose() })
        }
      }  
    }    
    
    swingBuilder.frame(title:"Gwitter",defaultCloSEOperation:JFrame.EXIT_ON_CLOSE,size:[400,500],show:true) {
      customMenuBar()                         
    }    
  }  
}

请注意?customMenuBar?闭包的嵌套层次结构。为了便于阅读,这里添加了换行和缩进,但是同样很容易在同一行中定义它。定义这个闭包之后,在?frame?闭包中调用它。再次输入?groovy Gwitter,确认会出现?File?菜单,见图 4。选择?File > Exit,关闭这个应用程序。


图 4. Gwitter 的 File 菜单

?

再看看?清单 11。注意,actionPerformed?处理函数定义为闭包,而不是匿名类。与相应的 Java 代码相比,这样的代码更干净、更容易阅读。

现在,添加一些表单元素以执行搜索。

添加搜索面板

经验丰富的 Swing 开发人员善于用单独的?JPanel?组装出最终的应用程序。这些容器组件可以方便地把相似、相关的组件分组在一起。

例如,Gwitter 需要一个?JTextField(让用户能够输入搜索条件)和一个?JButton?(用于提交请求)。把这两个组件分组在一个searchPanel?闭包中是有意义的,见清单 12:


清单 12. 添加搜索面板
import groovy.swing.SwingBuilder import javax.swing.* import java.awt.* class Gwitter{ def searchField static void main(String[] args){ def gwitter = new Gwitter() gwitter.show() } void show(){ def swingBuilder = new SwingBuilder() def customMenuBar = { swingBuilder.menuBar{ menu(text: "File",actionPerformed: {dispose() }) } } } def searchPanel = { swingBuilder.panel(constraints: BorderLayout.NORTH){ searchField = textField(columns:15) button(text:"Search",actionPerformed:{ /* TODO */ } ) } } swingBuilder.frame(title:"Gwitter",show:true) { customMenuBar() searchPanel() } } }

开始处理面板之后,就要选择适当的?LayoutManger。在默认情况下,JPanel?使用?FlowLayout。这意味着?textField?和?button?挨着水平排列。

JFrame?的?contentPane?不太一样 — 它在默认情况下使用?BorderLayout。这意味着在框架中添加?searchPanel?时需要指定它应该出现在哪个区域:NORTHSOUTHEASTWEST?或?CENTER。(如果您的地理知识实在糟糕,也可以使用PAGE_STARTPAGE_ENDLINE_STARTLINE_END?和?CENTER)。关于 Swing 中可用的各种?LayoutManager?的更多信息,请参见?参考资料。

注意,searchField?变量是在类级声明的。因此,按钮等其他组件也可以访问它。其他组件都是匿名的。快速浏览一下类属性,就会看出某些组件比较重要。

您可能已经注意到按钮的?actionPerformed?监听器目前没有做任何事情。现在实际上还不需要它做什么。在实现它之前,需要在应用程序中添加另一个面板:用来显示搜索结果的面板。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读