实战 Groovy(五)- 添加结果面板
实战 Groovy(5)- 添加结果面板
清单 13. 添加
图 5. 搜索结果
如清单 13 所示,像对待 searchPanel
那样,在嵌套的闭包中定义 resultsPanel
。但是,这一次在这个面板中嵌套另一个容器:JScrollPane
。这个组件可以根据需要显示和隐藏水平和垂直滚动条。Search.byKeyword()
方法调用的结果显示在名为resultsList
的 JList
中。(JList.setListData()
方法接受一个 Object[]
— 这就是 Search.byKeyword()
方法返回的结果)。
清单 13. 添加
resultsPanel
import groovy.swing.SwingBuilder import javax.swing.* import java.awt.* class Gwitter{ def searchField def resultsList 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() }) } } } def searchPanel = { swingBuilder.panel(constraints: BorderLayout.NORTH){ searchField = textField(columns:15) button(text:"Search", actionPerformed:{ resultsList.listData = Search.byKeyword(searchField.text) } ) } } def resultsPanel = { swingBuilder.scrollPane(constraints: BorderLayout.CENTER){ resultsList = list() } } swingBuilder.frame(title:"Gwitter", defaultCloseOperation:JFrame.EXIT_ON_CLOSE, size:[400,500], show:true) { customMenuBar() searchPanel() resultsPanel() } } } |
注意,与 searchField
一样,resultsList
变量是在类级定义的。searchPanel
中按钮的 actionPerformed
处理函数使用这两个变量。
添加 resultsPanel
之后,Gwitter 现在有实际功能了。在命令提示上输入 groovy Gwitter
,检查它是否工作正常。搜索 thirstyhead应该会产生图 5 所示的结果:
图 5. 搜索结果
现在可以宣布成功了,但是我想先解决两个问题。第一个问题是搜索按钮的 actionPerformed
处理函数可能会引起线程问题。另一个问题是这个应用程序太一般了。下面两节解决这些问题。
更新的详细信息请参考 java进阶网 www.javady.com