2017-03-16 16 views
0

"Calculator like"キー機能を使用して、Groovyアプリケーションで書き込もうとしています。キーボードのキー、JButtonのに焦点を当てがあるか否かノーmatther対応Groovy Swing Builderを使用したJavaキーバインド

  • プレスのJButton
  • プレス:だから私は呼び出されるスイングアクション、Iをしたいと思います。

ここで説明するように、おそらく最良の解決策は、Javaのキーバインディングを使用することです:GroovyとJavaを組み合わせた後 https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

はうまく動作するようです:

package packageSwingTest4 
import groovy.swing.SwingBuilder 
import javax.swing.* 
import java.awt.* 
import javax.swing.WindowConstants as WC 
class SwingTest4 { 
    def static b 
    static void main(args) { 
     def swing = new SwingBuilder()  
     def f2Action = swing.action(name:"F2", shortDescription:"F2 button", accelerator:"F2") { 
     println "F2 pressed" 
     } 

     swing.edt { 
     def f=frame(title: 'Keborad Binding test', size:[400,300],defaultCloseOperation: JFrame.EXIT_ON_CLOSE, show: true) { 
       panel { 
       b = button(text: 'F2', actionPerformed:{println "FFFF2222 pressed"}) 
       b.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F2"),"F2 pressed") 
       b.getActionMap().put("F2 pressed",f2Action) 
      } 
     } 
    } 
} 

}

しかし、私はGroovy/Javaをこのように、つまり私のように組み合わせるのは嫌いです。 - Groovyコードの構造が緩いGUI - Groovyスイングビルダの場合のように、アクションを個別に定義する必要があります。

純粋なGroovy/SwingBuilderを使用して私の問題を「よりクリーンに」解決する方法について知っていますか?私は

が助けと勧告

答えて

1

100%ではないことを確認いただき、ありがとうございます...キーバインディング、キーないリスナーを使用することを好むだろうが、あなたはこのように意味ですか:

import groovy.swing.* 
import javax.swing.* 

def swing = new SwingBuilder()  

def f2Action = swing.action(name:"F2 text", shortDescription:"F2 button", keyStroke:"F2") { 
    println "F2 pressed" 
} 

swing.edt { 
    frame(title: 'Keborad Binding test', size:[400,300],defaultCloseOperation: JFrame.HIDE_ON_CLOSE, show: true) { 
     panel { 
      button(text: 'F2', 
        actionPerformed:{ println "FFFF2222 pressed" }) { 
       action(f2Action) 
      } 
     } 
    } 
} 
+0

はい、これは私が探していた解決策です。迅速な対応をありがとう。私のsimpified最終的なコードは次のとおりです: – jirka

0
 def swing = new SwingBuilder() 

     def f2Action = swing.action(name:"F2 text", shortDescription:"F2 button", focus: JComponent.WHEN_IN_FOCUSED_WINDOW, keyStroke:"F2") { 
     println "F2 pressed" 
    } 
     def f3Action = swing.action(name:"F3 text", shortDescription:"F2 button", keyStroke:"F3") { 
     println "F3 pressed" 
    } 

     swing.edt { 
     frame(title: 'Keborad Binding test', size:[400,300],defaultCloseOperation: JFrame.HIDE_ON_CLOSE, show: true) { 
       panel { 
         button('F2') {action(f2Action)} 
         button('F3') {action(f3Action)} 
      } 
      } 
     } 
関連する問題