Skip to content

Commit f89705b

Browse files
committed
Merge pull request #28 from jacobsallan/comporientation
componentOrientation added to UIElement. Two layout demos added.
2 parents 7d9fe00 + bd92bfa commit f89705b

File tree

7 files changed

+191
-13
lines changed

7 files changed

+191
-13
lines changed

examples/src/main/scala/scala/swing/examples/tutorials/components/ButtonDemo.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ object ButtonDemo extends SimpleSwingApplication {
104104

105105
lazy val top = new MainFrame() {
106106
title = "ButtonDemo"
107-
javax.swing.UIManager.put("swing.boldMetal", false)
107+
//TD javax.swing.UIManager.put("swing.boldMetal", false)
108108

109109
contents = new ButtonDemo()
110110
}

examples/src/main/scala/scala/swing/examples/tutorials/components/LabelDemo.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,15 @@ class LabelDemo extends GridPanel(3, 1) {
6969
}
7070

7171
object LabelDemo extends SimpleSwingApplication {
72-
UIManager.put("swing.boldMetal", false)
72+
//TD UIManager.put("swing.boldMetal", false)
7373
/** Returns an ImageIcon option, or None if the path was invalid. */
7474
def createImageIcon(path: String, desc:String ): Option[javax.swing.ImageIcon] =
7575
Option(resourceFromClassloader(path)).map(imgURL => Swing.Icon(imgURL))
7676

7777
lazy val top = new MainFrame() {
7878
title = "LabelDemo"
7979
//Create and set up the content pane.
80-
javax.swing.UIManager.put("swing.boldMetal", false)
80+
//TD javax.swing.UIManager.put("swing.boldMetal", false)
8181
contents = new LabelDemo()
8282
}
8383
}

examples/src/main/scala/scala/swing/examples/tutorials/components/SliderDemo.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ class SliderDemo(window: Window) extends BoxPanel(Orientation.Vertical) with Act
161161
}
162162

163163
object SliderDemo extends SimpleSwingApplication {
164-
UIManager.put("swing.boldMetal", false)
164+
//TD UIManager.put("swing.boldMetal", false)
165165
/** Returns an ImageIcon, or null if the path was invalid. */
166166
def createImageIcon(path: String): Option[javax.swing.ImageIcon] = {
167167
Option(resourceFromClassloader(path)).map(imgURL => Swing.Icon(imgURL))
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.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+
//TD 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: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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+
val buttonSeq = Seq[Button](
58+
new Button("Button 1"),
59+
new Button("Button 2"),
60+
new Button("Button 3"),
61+
new Button("Long Named Button 4"),
62+
new Button("5") )
63+
compsToExperiment.contents ++= buttonSeq
64+
65+
//Left to right component orientation is selected by default
66+
compsToExperiment.componentOrientation = ComponentOrientation.LEFT_TO_RIGHT
67+
68+
//Add controls to set up the component orientation in the experiment layout
69+
val group = new ButtonGroup() {
70+
buttons += LtoRbutton
71+
buttons += RtoLbutton
72+
}
73+
controls.contents += LtoRbutton
74+
controls.contents += RtoLbutton
75+
controls.contents += applyButton
76+
77+
layout(compsToExperiment) = BorderPanel.Position.Center
78+
layout(controls) = BorderPanel.Position.South
79+
80+
listenTo(applyButton)
81+
reactions += {
82+
case ButtonClicked(`applyButton`) =>
83+
compsToExperiment.componentOrientation =
84+
if (LtoRbutton.selected) ComponentOrientation.LEFT_TO_RIGHT
85+
else ComponentOrientation.RIGHT_TO_LEFT
86+
compsToExperiment.validate()
87+
compsToExperiment.repaint()
88+
}
89+
}
90+
91+
object FlowLayoutDemo extends SimpleSwingApplication {
92+
/* Use an appropriate Look and Feel */
93+
//TD UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel")
94+
/* Turn off metal's use of bold fonts */
95+
//TD UIManager.put("swing.boldMetal", false)
96+
lazy val top = new MainFrame() {
97+
title = "FlowLayoutDemo"
98+
contents = new FlowLayoutDemo()
99+
}
100+
}

examples/src/main/scala/scala/swing/examples/tutorials/misc/FocusConceptsDemo.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,15 +89,15 @@ class FocusConceptsDemo extends BorderPanel {
8989
object FocusConceptsDemo extends SimpleSwingApplication {
9090

9191
/* Use an appropriate Look and Feel */
92-
try {
93-
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
94-
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
95-
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
96-
} catch {
97-
case NonFatal(ex) => ex.printStackTrace()
98-
}
92+
//TD try {
93+
// // UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
94+
// //UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
95+
// UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
96+
// } catch {
97+
// case NonFatal(ex) => ex.printStackTrace()
98+
// }
9999
/* Turn off metal's use of bold fonts */
100-
UIManager.put("swing.boldMetal", false);
100+
//TD UIManager.put("swing.boldMetal", false);
101101
//Create and set up the window.
102102
lazy val top = new MainFrame() {
103103
title = "FocusConceptsDemo"

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

Lines changed: 5 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
@@ -108,6 +111,7 @@ trait UIElement extends Proxy with LazyPublisher {
108111
def showing: Boolean = peer.isShowing
109112
def displayable: Boolean = peer.isDisplayable
110113

114+
def validate() { peer.validate }
111115
def repaint() { peer.repaint }
112116
def repaint(rect: Rectangle) { peer.repaint(rect.x, rect.y, rect.width, rect.height) }
113117
def ignoreRepaint: Boolean = peer.getIgnoreRepaint

0 commit comments

Comments
 (0)