Skip to content

Commit 4a6544f

Browse files
author
Allan Jacobs
committed
componentOrientation added to UIElement. Two layout demos added.
1 parent 7d9fe00 commit 4a6544f

File tree

3 files changed

+179
-1
lines changed

3 files changed

+179
-1
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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 javax.swing.{SwingUtilities, UIManager}
35+
import java.awt.{ ComponentOrientation, Dimension }
36+
37+
/**
38+
* Tutorials: How to Use BorderLayout
39+
* [[http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html]]
40+
*
41+
* Source code reference:
42+
* [[http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/BorderLayoutDemoProject/src/layout/BorderLayoutDemo.java]]
43+
*/
44+
class BorderLayoutDemo extends BorderPanel {
45+
if (BorderLayoutDemo.RightToLeft) {
46+
componentOrientation = ComponentOrientation.RIGHT_TO_LEFT
47+
}
48+
val button1 = new Button("Button 1 (PAGE_START)")
49+
val button2 = new Button("Button 2 (CENTER)") {
50+
preferredSize = new Dimension(200, 100)
51+
}
52+
val button3 = new Button("Button 3 (LINE_START)")
53+
val button4 = new Button("Long-Named Button 4 (LINE_END)")
54+
val button5 = new Button("5 (PAGE_END)")
55+
56+
layout(button1) = BorderPanel.Position.North
57+
layout(button2) = BorderPanel.Position.Center
58+
layout(button3) = BorderPanel.Position.West
59+
layout(button4) = BorderPanel.Position.East
60+
layout(button5) = BorderPanel.Position.South
61+
}
62+
63+
object BorderLayoutDemo extends SimpleSwingApplication {
64+
val RightToLeft = true
65+
/* Use an appropriate Look and Feel */
66+
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel")
67+
/* Turn off metal's use bold fonts */
68+
UIManager.put("swing.boldMetal", false)
69+
//Create and set up the window.
70+
lazy val top = new MainFrame {
71+
title = "BorderLayoutDemo"
72+
contents = new BorderLayoutDemo()
73+
}
74+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
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+
}

src/main/scala/scala/swing/UIElement.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
package scala.swing
1010

11-
import java.awt.Cursor
11+
import java.awt.{ComponentOrientation, Cursor}
1212
import event._
1313
import scala.ref._
1414
import java.util.WeakHashMap
@@ -88,10 +88,13 @@ trait UIElement extends Proxy with LazyPublisher {
8888
def maximumSize_=(x: Dimension) = peer setMaximumSize x
8989
def preferredSize = peer.getPreferredSize
9090
def preferredSize_=(x: Dimension) = peer setPreferredSize x
91+
def componentOrientation = peer.getComponentOrientation
92+
def componentOrientation_=(x: ComponentOrientation) = peer setComponentOrientation x
9193

9294
def font: Font = peer.getFont
9395
def font_=(f: Font) = peer setFont f
9496

97+
9598
def locationOnScreen = peer.getLocationOnScreen
9699
def location = peer.getLocation
97100
def bounds = peer.getBounds

0 commit comments

Comments
 (0)