Only my share

Java , Groovy and others

The beauty of SwingBuilder

leave a comment »

When I was in the University (STT TELKOM / IT TELKOM), I had a favorite text book as my Java reference. The book title is Core JAVA-Volume 1 and 2 written by Cay S Horstmann and Gary Cornell. In chapter 8 about Event Handling, the authors explained to the reader about basic event handling with one code example. The example will generate a Frame that consists of three buttons with the label “Yellow”, “Blue”, and “Red”. If one of its button is pressed the event will be triggered by each button to change the background color of the Frame. The following code is taken from their book:

1. import java.awt.*;
2. import java.awt.event.*;
3. import javax.swing.*;
4.
5. public class ButtonTest
6. {
7.  public static void main(String[] args)
8. {
9. ButtonFrame frame = new ButtonFrame();
10. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11. frame.show();
12. }
13. }
14.
15. /**
16. A frame with a button panel
17. */
18. class ButtonFrame extends JFrame
19. {
20. public ButtonFrame()
21. {
22. setTitle(“ButtonTest”);
23. setSize(WIDTH, HEIGHT);
24.
25. // add panel to frame
26.
27. ButtonPanel panel = new ButtonPanel();
28. Container contentPane = getContentPane();
29. contentPane.add(panel);
30. }
31.
32. public static final int WIDTH = 300;
33. public static final int HEIGHT = 200;
34. }
35.
36. /**
37. A panel with three buttons.
38. */
39. class ButtonPanel extends JPanel
40. {
41. public ButtonPanel()
42. {
43. // create buttons
44.
45. JButton yellowButton = new JButton(“Yellow”);
46. JButton blueButton = new JButton(“Blue”);
47. JButton redButton = new JButton(“Red”);
48.
49. // add buttons to panel
50.
51. add(yellowButton);
52. add(blueButton);
53. add(redButton);
54.
55. // create button actions
56.
57. ColorAction yellowAction = new ColorAction(Color.yellow);
58. ColorAction blueAction = new ColorAction(Color.blue);
59. ColorAction redAction = new ColorAction(Color.red);
60.
61. // associate actions with buttons
62.
63. yellowButton.addActionListener(yellowAction);
64. blueButton.addActionListener(blueAction);
65. redButton.addActionListener(redAction);
66. }
67.
68. /**
69. An action listener that sets the panel’s background color.
70. */
71. private class ColorAction implements ActionListener
72. {
73. public ColorAction(Color c)
74. {
75. backgroundColor = c;
76. }
77.
78. public void actionPerformed(ActionEvent event)
79. {
80. setBackground(backgroundColor);
81. repaint();
82. }
83.
84. private Color backgroundColor;
85. }
86. }

Now, I want to show you how Groovy will accomplish the same program with its SwingBuilder Power:

import groovy.swing.SwingBuilder;

swing = new SwingBuilder()
frame = swing.frame(size:[400,500], title:’Swing Demo’, defaultCloseOperation:javax.swing.JFrame.EXIT_ON_CLOSE){
panel(id:’mainPanel’){
button(‘Red’, actionPerformed : {
mainPanel.background = java.awt.Color.RED
mainPanel.repaint()
})
button(‘Yellow’,actionPerformed : {
mainPanel.background = java.awt.Color.YELLOW
mainPanel.repaint()
})
button(‘Blue’, actionPerformed : {
mainPanel.background = java.awt.Color.BLUE
mainPanel.repaint()
})
}
}
frame.show()

From this two code, we can make a conclution that groovy code especially in its Swing Framework support is more flexible and more intuitive for us to figure out the containtment structure of its GUI components. In Java languange Swing Framework code programming is very hard to be read and not easly show us the containtment structure of its GUI components.

Written by adpjhype

January 7, 2009 at 3:47 pm

Posted in Groovy

Tagged with

Leave a Reply