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