groovyã®åå¼·ï¼swingã使ã£ã¦ã¿ã
ããã¹ããã¡ã¤ã«ãèªã¿è¾¼ãã§ãæå®ãããè¡ã«ãããããè¡ã ãã表示ããããã°ã©ã ã
ã¨ããããã次ã®ãã¨ã試ãã¦ã¿ãã
- JFileChooserã®metaclassã使ã£ã¦ããã¡ã¤ã«ãªã¼ãã³ã¨ä¿åã®å¦çå 容ãã¯ãã¼ã¸ã£ã§å®ç¾©ãã¦ãç°¡æã«èªã¿ã ããã¨ãã§ããããã«ãã¦ã¿ãã
- 使ããããªæã«bindã使ã£ã¦ã¿ãã
絶è³æ ¼éä¸ã®ã¨ããã
- ã¯ã©ã¹å ã®ã¡ã½ããããããããã£ãæ¸ãå¤ããå ´åã@Bindableãæå¹ã«åãã¦ãããªãããªãï¼
ææ³
- ç´ ã®Swingããã¯ç°¡åã«æ¸ãããã©ãã¾ã åé·ã«è¦ããããã£ã¨çç¥ãã¦è²ã æ¸ããããã«ã©ã¤ãã©ãªãæ´åããããï¼ Griffonï¼
- bindingãå°ã使ãã¥ãããã©ãããªããModel->Swingã ãã§ãªããSwing->Modelï¼JTextFieldã«æååãå ¥åããã¨ãã¢ãã«ã«èªåã§åæ ãããã¿ãããªï¼ã®ãããªãã®ãç°¡åã«è¨è¿°ã§ããã¨å¬ããã
- LayoutManagerã«Forms使ãããã
import java.awt.BorderLayout; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.filechooser.FileNameExtensionFilter import groovy.beans.Bindable; import groovy.swing.SwingBuilder; // JFileChooserã«ãããã¡ã¤ã«ãéããã¤ã¢ãã°ãéãã¦ããã¡ã¤ã«ãé¸æããããæå®ãããå¦çãå®è¡ãããã¡ã½ããã追å JFileChooser.metaClass.openFile = { window, action -> if( delegate.showOpenDialog(window) == JFileChooser.APPROVE_OPTION ){ action.call(delegate.getSelectedFile()) } } // JFileChooserã«ãããã¡ã¤ã«ä¿åãã¤ã¢ãã°ãéãã¦ããã¡ã¤ã«ãé¸æããããæå®ãããå¦çãå®è¡ãããã¡ã½ããã追å JFileChooser.metaClass.saveFile = { window, action -> if( delegate.showSaveDialog(window) == JFileChooser.APPROVE_OPTION ){ action.call(delegate.getSelectedFile()) } } // æ¬ããã°ã©ã ã®ãã¼ã¿ãæ ¼ç´ãã¦ããã¢ãã« class TextFilterModel { @Bindable File inputFile = null @Bindable String matcher = "" @Bindable String filteredText = "" } // ãã£ã«ã¿å¦çã®å®ç¾©ï¼TextFilterModelå ã«ã¡ã½ããå®ç¾©ããã¨ãªããåããªããããï¼ def filter( model ){ if( model.inputFile != null ){ model.filteredText = model.inputFile.filterLine { line -> line =~ model.matcher } } } model = new TextFilterModel() // 以éãç»é¢å¨ãã®å®ç¾© swing = new SwingBuilder() swing.lookAndFeel("system") chooser = swing.fileChooser( dialogTitle: "Choose Text File.", acceptAllFileFilterUsed: true, fileSelectionMode: JFileChooser.FILES_ONLY, fileFilter: new FileNameExtensionFilter("*.txt", "txt") ) // ã¡ã¤ã³ã¦ã£ã³ãã¦ã®å®ç¾© frame = swing.frame( id: 'mainwindow', title: swing.bind(source:model, sourceProperty:'inputFile', converter:{f->"TextFilter ver 0.1 : ${f}"}), defaultCloseOperation: JFrame.EXIT_ON_CLOSE, pack: true, visible: true, ){ // ã¡ãã¥ã¼ãã¼ã®å®ç¾© menuBar(){ menu(text: "File"){ menuItem(text: "Open File", actionPerformed: { chooser.openFile(mainwindow){ file -> model.inputFile = file filter(model) } }) menuItem(text: "Save File", actionPerformed: { chooser.saveFile(mainwindow){ file -> file.write(model.filteredText) } }) separator() menuItem(text: "Exit", actionPerformed: {dispose()}) } } // ãã£ã«ã¿ç¨ããã¹ãã®å®ç¾© textField( id: 'matcherField', constraints: BorderLayout.NORTH, actionPerformed: { model.matcher = matcherField.text; filter(model) } ) // ãã£ã«ã¿å¾ããã¹ãã®è¡¨ç¤ºé åã®å®ç¾© scrollPane(constraints: BorderLayout.CENTER){ textArea( columns: 80, rows: 10, editable: false, text: bind(source: model, sourceProperty: 'filteredText') ) } }