Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A GroovyFX version of the Canoo JavaFX Abacus tutorial part IV
@Grab('org.codehaus.groovyfx:groovyfx:0.3.1')
import static groovyx.javafx.GroovyFX.start
final int ROW_COUNT = 10
final int COL_COUNT = 10
final int RADIUS = 20
final int DIAMETER = 2 * RADIUS
final int MOVE_WAY = 8 * DIAMETER
final int WIDTH = COL_COUNT * DIAMETER + MOVE_WAY
final int HEIGHT = ROW_COUNT * DIAMETER
final int PADDING = 20
final int OFFSET = PADDING + RADIUS
final int RAIL_HEIGHT = 10
start {
stage( title: 'GroovyFX Abacus with Binding', visible: true ) {
scene( width: WIDTH + 2 * PADDING, height: HEIGHT + 2 * PADDING ) {
(0..<ROW_COUNT).each { int row ->
rectangle( x:PADDING, y:OFFSET - (RAIL_HEIGHT / 2) + (row * DIAMETER),
width:WIDTH, height:RAIL_HEIGHT )
(0..<COL_COUNT).each { int column ->
circle( radius : RADIUS - 1,
centerX: OFFSET + ( column * DIAMETER ),
centerY: OFFSET + (row * DIAMETER) ).with { thisCircle ->
thisCircle.onMouseClicked = { e ->
int newX = thisCircle.translateX > 1 ? 0 : MOVE_WAY
translateTransition( 200.ms, node:thisCircle, toX:newX ).playFromStart()
} as javafx.event.EventHandler
text( x: thisCircle.centerX - 3, y: thisCircle.centerY + 4,
text:"${(COL_COUNT - column) % COL_COUNT}",
fill: WHITE,
translateX: bind { thisCircle.translateX },
onMouseClicked: thisCircle.onMouseClicked )
}
}
}
}
}
}
@Grab('org.codehaus.groovyfx:groovyfx:0.3.1')
import static groovyx.javafx.GroovyFX.start
final int ROW_COUNT = 10
final int COL_COUNT = 10
final int RADIUS = 20
final int DIAMETER = 2 * RADIUS
final int MOVE_WAY = 8 * DIAMETER
final int WIDTH = COL_COUNT * DIAMETER + MOVE_WAY
final int HEIGHT = ROW_COUNT * DIAMETER
final int PADDING = 20
final int OFFSET = PADDING + RADIUS
final int RAIL_HEIGHT = 10
start {
stage( title: 'GroovyFX Abacus with Grouping instead of Binding', visible: true ) {
scene( width: WIDTH + 2 * PADDING, height: HEIGHT + 2 * PADDING ) {
(0..<ROW_COUNT).each { int row ->
rectangle( x:PADDING, y:OFFSET - (RAIL_HEIGHT / 2) + (row * DIAMETER),
width:WIDTH, height:RAIL_HEIGHT )
(0..<COL_COUNT).each { int column ->
group {
def (int cx, int cy) = [ OFFSET + ( column * DIAMETER ), OFFSET + (row * DIAMETER) ]
circle( radius : RADIUS - 1, centerX: cx, centerY: cy )
text( x: cx - 3, y: cy + 4, text:"${(COL_COUNT - column) % COL_COUNT}", fill: WHITE )
}.onMouseClicked = { e ->
int newX = e.source.translateX > 1 ? 0 : MOVE_WAY
translateTransition( 200.ms, node:e.source, toX:newX ).playFromStart()
} as javafx.event.EventHandler
}
}
}
}
}
@timyates

This comment has been minimized.

Copy link
Owner Author

commented Feb 4, 2013

@Dierk

This comment has been minimized.

Copy link

commented Feb 4, 2013

Added back link - thanks!

@timyates

This comment has been minimized.

Copy link
Owner Author

commented Feb 4, 2013

Added abacusGrouped showing how it can be done with groupings rather than bindings (following Andrei's comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.