| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| /** |
| * @author <a href="mailto:shemnon@yahoo.com">Danno Ferrin</a> |
| * @since Groovy 1.1 |
| * |
| * The real interesting part of this example are in the three properties of button: |
| * |
| * text: bind(source:textField, sourceProperty:'text'), |
| * margin: bind(source:slider, sourceProperty:'value', converter:{[it, it, it, it] as Insets}), |
| * enabled: bind(source:checkBox, sourceProperty:'selected') |
| * |
| * This is where the real magic goes on, causing the button to react to the changes |
| * in the source widgets values. |
| */ |
| package swing |
| |
| import groovy.swing.SwingBuilder |
| import java.awt.GridBagConstraints as gb |
| import java.awt.Insets |
| |
| sb = SwingBuilder.build() { |
| frame = frame(defaultCloseOperation:javax.swing.JFrame.DISPOSE_ON_CLOSE) { |
| gridBagLayout() |
| |
| label("Text:", anchor:gb.WEST, insets:[6,6,3,3] as Insets) |
| textField = textField("Change Me!", fill:gb.HORIZONTAL, gridwidth:gb.REMAINDER, insets:[6,3,3,6] as Insets) |
| |
| label("Margin:", anchor:gb.WEST, insets:[3,6,3,3] as Insets) |
| slider = slider(value:5, fill:gb.HORIZONTAL, gridwidth:gb.REMAINDER, insets:[3,3,3,6] as Insets) |
| |
| panel() |
| checkBox = checkBox("Enbled", anchor:gb.WEST, gridwidth:gb.REMAINDER, insets:[3,3,3,6] as Insets) |
| |
| separator(fill:gb.HORIZONTAL, gridwidth:gb.REMAINDER) |
| |
| button(anchor:gb.CENTER, gridwidth:gb.REMAINDER, gridheight:gb.REMAINDER, weightx:1.0, weighty:1.0, insets:[3,6,6,6] as Insets, |
| text: bind(source:textField, sourceProperty:'text'), |
| margin: bind(source:slider, sourceProperty:'value', converter:{[it, it, it, it] as Insets}), |
| enabled: bind(source:checkBox, sourceProperty:'selected') |
| ) |
| } |
| } |
| |
| frame.pack() |
| frame.setSize(frame.width + 100, frame.height + 200) |
| frame.show() |