1
+ /*
2
+ * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions
6
+ * are met:
7
+ *
8
+ * - Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ *
11
+ * - Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ *
15
+ * - Neither the name of Oracle or the names of its
16
+ * contributors may be used to endorse or promote products derived
17
+ * from this software without specific prior written permission.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ */
31
+ package scala .swing .examples .tutorials .layout
32
+
33
+ import scala .swing ._
34
+ import scala .swing .event .ButtonClicked
35
+ import java .awt .ComponentOrientation
36
+ import javax .swing .UIManager
37
+
38
+ /**
39
+ * Tutorials: How to Use FlowLayout
40
+ * [[http://docs.oracle.com/javase/tutorial/uiswing/layout/flow.html ]]
41
+ *
42
+ * Source code reference:
43
+ * [[http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/FlowLayoutDemoProject/src/layout/FlowLayoutDemo.java ]]
44
+ *
45
+ * FlowLayoutDemo.scala requires no other files
46
+ */
47
+ class FlowLayoutDemo extends BorderPanel {
48
+ val RtoL = " Right to left"
49
+ val LtoR = " Left to right"
50
+ val controls : FlowPanel = new FlowPanel ()
51
+ val applyButton = new Button (" Apply component orientation" )
52
+ val compsToExperiment = new FlowPanel (FlowPanel .Alignment .Trailing )()
53
+ val LtoRbutton = new RadioButton (LtoR ) { selected = true }
54
+ val RtoLbutton = new RadioButton (RtoL )
55
+
56
+ // Add buttons to the experiment layout
57
+ compsToExperiment.contents += new Button (" Button 1" )
58
+ compsToExperiment.contents += new Button (" Button 2" )
59
+ compsToExperiment.contents += new Button (" Button 3" )
60
+ compsToExperiment.contents += new Button (" Long Named Button 4" )
61
+ compsToExperiment.contents += new Button (" 5" )
62
+
63
+ // Left to right component orientation is selected by default
64
+ compsToExperiment.componentOrientation = ComponentOrientation .LEFT_TO_RIGHT
65
+
66
+ // Add controls to set up the component orientation in the experiment layout
67
+ val group = new ButtonGroup () {
68
+ buttons += LtoRbutton
69
+ buttons += RtoLbutton
70
+ }
71
+ controls.contents += LtoRbutton
72
+ controls.contents += RtoLbutton
73
+ controls.contents += applyButton
74
+
75
+ layout(compsToExperiment) = BorderPanel .Position .Center
76
+ layout(controls) = BorderPanel .Position .South
77
+
78
+ listenTo(applyButton)
79
+ reactions += {
80
+ case ButtonClicked (`applyButton`) =>
81
+ if (LtoRbutton .selected) {
82
+ compsToExperiment.componentOrientation = ComponentOrientation .LEFT_TO_RIGHT
83
+ }
84
+ else {
85
+ compsToExperiment.componentOrientation = ComponentOrientation .RIGHT_TO_LEFT
86
+ }
87
+ compsToExperiment.peer.validate()
88
+ compsToExperiment.repaint()
89
+ }
90
+ }
91
+
92
+ object FlowLayoutDemo extends SimpleSwingApplication {
93
+ /* Use an appropriate Look and Feel */
94
+ UIManager .setLookAndFeel(" javax.swing.plaf.metal.MetalLookAndFeel" )
95
+ /* Turn off metal's use of bold fonts */
96
+ UIManager .put(" swing.boldMetal" , false )
97
+ lazy val top = new MainFrame () {
98
+ title = " FlowLayoutDemo"
99
+ contents = new FlowLayoutDemo ()
100
+ }
101
+ }
0 commit comments