summaryrefslogtreecommitdiff
path: root/src/swing
diff options
context:
space:
mode:
authorNAME <USER@epfl.ch>2008-04-23 08:22:47 +0000
committerNAME <USER@epfl.ch>2008-04-23 08:22:47 +0000
commit5ce0d309ab82680c424902940304046f41864fd0 (patch)
treeebd1930322dace98ff69da0ba2e3a3a72f3caacb /src/swing
parent072455265526c994fb39221624209a3180b41837 (diff)
downloadscala-5ce0d309ab82680c424902940304046f41864fd0.tar.gz
scala-5ce0d309ab82680c424902940304046f41864fd0.tar.bz2
scala-5ce0d309ab82680c424902940304046f41864fd0.zip
Peers are lazy vals now
Diffstat (limited to 'src/swing')
-rw-r--r--src/swing/doc/README7
-rw-r--r--src/swing/scala/swing/BoxPanel.scala6
-rw-r--r--src/swing/scala/swing/Button.scala4
-rw-r--r--src/swing/scala/swing/CheckBox.scala6
-rw-r--r--src/swing/scala/swing/Component.scala4
-rw-r--r--src/swing/scala/swing/ComponentList.scala11
-rw-r--r--src/swing/scala/swing/EdgePosition.scala10
-rw-r--r--src/swing/scala/swing/FlowPanel.scala4
-rw-r--r--src/swing/scala/swing/FormattedTextField.scala4
-rw-r--r--src/swing/scala/swing/Frame.scala4
-rw-r--r--src/swing/scala/swing/GridBagPanel.scala5
-rw-r--r--src/swing/scala/swing/GridPanel.scala5
-rw-r--r--src/swing/scala/swing/Label.scala4
-rw-r--r--src/swing/scala/swing/MainFrame.scala3
-rw-r--r--src/swing/scala/swing/Menu.scala20
-rw-r--r--src/swing/scala/swing/Panel.scala4
-rw-r--r--src/swing/scala/swing/ProgressBar.scala4
-rw-r--r--src/swing/scala/swing/PushButton.scala4
-rw-r--r--src/swing/scala/swing/RadioButton.scala6
-rw-r--r--src/swing/scala/swing/ScrollPane.scala10
-rw-r--r--src/swing/scala/swing/Separator.scala5
-rw-r--r--src/swing/scala/swing/Slider.scala4
-rw-r--r--src/swing/scala/swing/SplitPane.scala5
-rw-r--r--src/swing/scala/swing/TabbedPane.scala13
-rw-r--r--src/swing/scala/swing/Table.scala56
-rw-r--r--src/swing/scala/swing/TextArea.scala10
-rw-r--r--src/swing/scala/swing/TextComponent.scala3
-rw-r--r--src/swing/scala/swing/TextField.scala10
-rw-r--r--src/swing/scala/swing/ToggleButton.scala6
-rw-r--r--src/swing/scala/swing/test/TableSelection.scala12
30 files changed, 133 insertions, 116 deletions
diff --git a/src/swing/doc/README b/src/swing/doc/README
index df3565e276..00aebe7b19 100644
--- a/src/swing/doc/README
+++ b/src/swing/doc/README
@@ -1,8 +1,7 @@
scala.swing
This is a UI library that will wrap most of Java Swing for Scala in a straightforward manner.
-The widget class hierarchy loosely resembles that of Java Swing. In a few places we decided
-to chose to depart from Java Swing's architecture. The main differences are:
+The widget class hierarchy loosely resembles that of Java Swing. The main differences are:
In Java Swing all components are containers per default. This doesn't make much sense for
a number of components, like TextField, CheckBox, RadioButton, and so on. Our guess is that
@@ -12,7 +11,7 @@ to chose to depart from Java Swing's architecture. The main differences are:
Layout managers and panels are coupled. There is no way to exchange the layout manager
of a panel. As a result, the layout constraints for widgets can be typed.
(Note that you gain more type-safety and don't loose much flexibility here. Besides
- that it is not a common operation, exchanging the layout manager of a panel in Java
+ being not a common operation, exchanging the layout manager of a panel in Java
Swing almost always leads to exchanging the layout constraints for every of the panel's
child component. In the end, it is not more work to move all children to a newly created
panel.)
@@ -23,7 +22,7 @@ to chose to depart from Java Swing's architecture. The main differences are:
The library comprises three main packages:
scala.swing
- All essential widget classes and traits.
+ All widget classes and traits.
scala.swing.event
The event hierarchy.
diff --git a/src/swing/scala/swing/BoxPanel.scala b/src/swing/scala/swing/BoxPanel.scala
index 0c13489025..d3de33030b 100644
--- a/src/swing/scala/swing/BoxPanel.scala
+++ b/src/swing/scala/swing/BoxPanel.scala
@@ -3,9 +3,11 @@ package scala.swing
/**
* @see javax.swing.BoxLayout
*/
-class BoxPanel(orientation: Orientation.Value) extends Panel ({
+class BoxPanel(orientation: Orientation.Value) extends Panel with SequentialContainer.Wrapper {
+ override lazy val peer = {
val p = new javax.swing.JPanel
val l = new javax.swing.BoxLayout(p, orientation.id)
p.setLayout(l)
p
- }) with SequentialContainer.Wrapper
+ }
+}
diff --git a/src/swing/scala/swing/Button.scala b/src/swing/scala/swing/Button.scala
index 233b293742..acdb212486 100644
--- a/src/swing/scala/swing/Button.scala
+++ b/src/swing/scala/swing/Button.scala
@@ -6,7 +6,9 @@ import event._
/**
* @see javax.swing.AbstractButton
*/
-abstract class Button(override val peer: JAbstractButton) extends Component(peer) with Action.Trigger with Publisher {
+abstract class Button extends Component with Action.Trigger with Publisher {
+ override lazy val peer: JAbstractButton = new JAbstractButton {}
+
def text: String = peer.getText
def text_=(s: String) = peer.setText(s)
def icon: Icon = peer.getIcon
diff --git a/src/swing/scala/swing/CheckBox.scala b/src/swing/scala/swing/CheckBox.scala
index 92ebb93769..20df7cecb9 100644
--- a/src/swing/scala/swing/CheckBox.scala
+++ b/src/swing/scala/swing/CheckBox.scala
@@ -5,7 +5,7 @@ import javax.swing._
/**
* @see javax.swing.JCheckBox
*/
-class CheckBox(override val peer: JCheckBox) extends ToggleButton(peer) {
- def this(txt: String) = this(new JCheckBox(txt))
- def this() = this(new JCheckBox)
+class CheckBox(text: String) extends ToggleButton {
+ override lazy val peer: JCheckBox = new JCheckBox(text)
+ def this() = this("")
} \ No newline at end of file
diff --git a/src/swing/scala/swing/Component.scala b/src/swing/scala/swing/Component.scala
index 8b3d85d05b..9e4aa71a4f 100644
--- a/src/swing/scala/swing/Component.scala
+++ b/src/swing/scala/swing/Component.scala
@@ -15,8 +15,8 @@ object Component {
/**
* @see javax.swing.JComponent
*/
-abstract class Component(override val peer: javax.swing.JComponent) extends UIElement with Publisher {
- def this() = this(new javax.swing.JComponent{})
+abstract class Component extends UIElement with Publisher {
+ override lazy val peer: javax.swing.JComponent = new javax.swing.JComponent{}
peer.putClientProperty(Component.ClientKey, this)
def minimumSize = peer.getMinimumSize
diff --git a/src/swing/scala/swing/ComponentList.scala b/src/swing/scala/swing/ComponentList.scala
index 99d431bf59..1bcecddf0d 100644
--- a/src/swing/scala/swing/ComponentList.scala
+++ b/src/swing/scala/swing/ComponentList.scala
@@ -3,13 +3,16 @@ package scala.swing
import javax.swing._
import event._
-class ComponentList(override val peer: JList) extends Component(peer) with SequentialContainer.Wrapper with Publisher {
- def this() = this(new JList)
- def this(elems: Seq[Object]) = this(new JList(elems.toArray))
+class ComponentList extends Component with SequentialContainer.Wrapper {
+ override lazy val peer: JList = new JList
+ def this(elems: Seq[Object]) = {
+ this()
+ peer.setListData(elems.toArray)
+ }
def fixedCellWidth = peer.getFixedCellWidth
def fixedCellWidth_=(x: Int) = peer.setFixedCellWidth(x)
def fixedCellHeight = peer.getFixedCellHeight
def fixedCellHeight_=(x: Int) = peer.setFixedCellHeight(x)
-}
+} \ No newline at end of file
diff --git a/src/swing/scala/swing/EdgePosition.scala b/src/swing/scala/swing/EdgePosition.scala
deleted file mode 100644
index 5214857303..0000000000
--- a/src/swing/scala/swing/EdgePosition.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package scala.swing
-
-import javax.swing.SwingConstants._
-
-object EdgePosition extends Enumeration {
- val Left = Value(LEFT)
- val Right = Value(RIGHT)
- val Top = Value(TOP)
- val Bottom = Value(BOTTOM)
-}
diff --git a/src/swing/scala/swing/FlowPanel.scala b/src/swing/scala/swing/FlowPanel.scala
index 08a5b7fa8f..05d5ecc0c7 100644
--- a/src/swing/scala/swing/FlowPanel.scala
+++ b/src/swing/scala/swing/FlowPanel.scala
@@ -15,8 +15,8 @@ object FlowPanel {
/**
* @see java.awt.FlowLayout
*/
-class FlowPanel(override val peer: javax.swing.JPanel) extends Panel(peer) with SequentialContainer.Wrapper {
- def this(alignment: FlowPanel.Alignment.Value) = this(new javax.swing.JPanel(new java.awt.FlowLayout(alignment.id)))
+class FlowPanel(alignment: FlowPanel.Alignment.Value) extends Panel with SequentialContainer.Wrapper {
+ override lazy val peer: javax.swing.JPanel = new javax.swing.JPanel(new java.awt.FlowLayout(alignment.id))
def this() = this(FlowPanel.Alignment.Center)
private def layoutManager = peer.getLayout.asInstanceOf[java.awt.FlowLayout]
diff --git a/src/swing/scala/swing/FormattedTextField.scala b/src/swing/scala/swing/FormattedTextField.scala
index e9658d27ca..75d32ee323 100644
--- a/src/swing/scala/swing/FormattedTextField.scala
+++ b/src/swing/scala/swing/FormattedTextField.scala
@@ -7,6 +7,6 @@ import event._
/**
* @see javax.swing.JFormattedTextField
*/
-class FormattedTextField(override val peer: JFormattedTextField) extends TextComponent(peer) {
- def this(format: java.text.Format) = this(new JFormattedTextField(format))
+class FormattedTextField(format: java.text.Format) extends TextComponent {
+ override lazy val peer: JFormattedTextField = new JFormattedTextField(format)
}
diff --git a/src/swing/scala/swing/Frame.scala b/src/swing/scala/swing/Frame.scala
index 019c0f3925..65596ca943 100644
--- a/src/swing/scala/swing/Frame.scala
+++ b/src/swing/scala/swing/Frame.scala
@@ -6,8 +6,8 @@ import event._
/**
* @see javax.swing.JFrame
*/
-class Frame(override val peer: JFrame) extends UIElement with RootPanel with Publisher {
- def this() = this(new JFrame)
+class Frame extends UIElement with RootPanel with Publisher {
+ override lazy val peer: JFrame = new JFrame
def title: String = peer.getTitle
def title_=(s: String) = peer.setTitle(s)
diff --git a/src/swing/scala/swing/GridBagPanel.scala b/src/swing/scala/swing/GridBagPanel.scala
index 44e0e774f4..8b12cbee60 100644
--- a/src/swing/scala/swing/GridBagPanel.scala
+++ b/src/swing/scala/swing/GridBagPanel.scala
@@ -35,11 +35,10 @@ object GridBagPanel {
/**
* @see java.awt.GridBagLayout
*/
-class GridBagPanel(override val peer: javax.swing.JPanel) extends Panel(peer) with LayoutContainer {
+class GridBagPanel extends Panel with LayoutContainer {
+ override lazy val peer = new javax.swing.JPanel(new java.awt.GridBagLayout)
import GridBagPanel._
- def this() = this(new javax.swing.JPanel(new java.awt.GridBagLayout))
-
private def layoutManager = peer.getLayout.asInstanceOf[java.awt.GridBagLayout]
class Constraints(val peer: GridBagConstraints) extends Proxy {
diff --git a/src/swing/scala/swing/GridPanel.scala b/src/swing/scala/swing/GridPanel.scala
index 9c8e246c20..c3ef15c843 100644
--- a/src/swing/scala/swing/GridPanel.scala
+++ b/src/swing/scala/swing/GridPanel.scala
@@ -7,8 +7,9 @@ object GridPanel {
/**
* @see java.awt.GridLayout
*/
-class GridPanel(override val peer: javax.swing.JPanel) extends Panel(peer) with SequentialContainer.Wrapper {
- def this(rows0: Int, cols0: Int) = this(new javax.swing.JPanel(new java.awt.GridLayout(rows0, cols0)))
+class GridPanel(rows0: Int, cols0: Int) extends Panel with SequentialContainer.Wrapper {
+ override lazy val peer = new javax.swing.JPanel(new java.awt.GridLayout(rows0, cols0))
+
private def layoutManager = peer.getLayout.asInstanceOf[java.awt.GridLayout]
def rows: Int = layoutManager.getRows
diff --git a/src/swing/scala/swing/Label.scala b/src/swing/scala/swing/Label.scala
index 9ccca8ac84..04ef62ab15 100644
--- a/src/swing/scala/swing/Label.scala
+++ b/src/swing/scala/swing/Label.scala
@@ -5,8 +5,8 @@ import javax.swing._
/**
* @see javax.swing.JLabel
*/
-class Label(override val peer: JLabel) extends Component(peer) {
- def this(txt: String) = this(new JLabel(txt))
+class Label(text0: String) extends Component {
+ override lazy val peer: JLabel = new JLabel(text0)
def this() = this("")
def text: String = peer.getText()
def text_=(s: String) = peer.setText(s)
diff --git a/src/swing/scala/swing/MainFrame.scala b/src/swing/scala/swing/MainFrame.scala
index e8399dc7f8..882226dd18 100644
--- a/src/swing/scala/swing/MainFrame.scala
+++ b/src/swing/scala/swing/MainFrame.scala
@@ -2,8 +2,7 @@ package scala.swing
import event._
-class MainFrame(peer: javax.swing.JFrame) extends Frame(peer) {
- def this() = this(new javax.swing.JFrame)
+class MainFrame extends Frame {
reactions += {
case WindowClosing(_) => System.exit(1)
}
diff --git a/src/swing/scala/swing/Menu.scala b/src/swing/scala/swing/Menu.scala
index 294a512f4e..57da050ef0 100644
--- a/src/swing/scala/swing/Menu.scala
+++ b/src/swing/scala/swing/Menu.scala
@@ -6,8 +6,8 @@ import javax.swing._
/**
* @see javax.swing.JMenuBar
*/
-class MenuBar(override val peer: JMenuBar) extends Component(peer) with SequentialContainer.Wrapper {
- def this() = this(new JMenuBar)
+class MenuBar extends Component with SequentialContainer.Wrapper {
+ override lazy val peer: JMenuBar = new JMenuBar
def menus: Seq[Menu] = contents.filter(_.isInstanceOf[Menu]).map(_.asInstanceOf[Menu])
@@ -25,8 +25,8 @@ class MenuBar(override val peer: JMenuBar) extends Component(peer) with Sequenti
/**
* @see javax.swing.JMenuItem
*/
-class MenuItem(override val peer: JMenuItem) extends Button(peer) {
- def this(title: String) = this(new JMenuItem(title))
+class MenuItem(title0: String) extends Button {
+ override lazy val peer: JMenuItem = new JMenuItem(title0)
def this(a: Action) = {
this("")
action = a
@@ -36,19 +36,19 @@ class MenuItem(override val peer: JMenuItem) extends Button(peer) {
/**
* @see javax.swing.JMenu
*/
-class Menu(override val peer: JMenu) extends MenuItem(peer) with SequentialContainer.Wrapper { self: Menu =>
- def this(title: String) = this(new JMenu(title))
+class Menu(title0: String) extends MenuItem(title0) with SequentialContainer.Wrapper { self: Menu =>
+ override lazy val peer: JMenu = new JMenu(title0)
}
/**
* @see javax.swing.JRadioButtonMenuItem
*/
-class RadioMenuItem(override val peer: JRadioButtonMenuItem) extends MenuItem(peer) {
- def this(title: String) = this(new JRadioButtonMenuItem(title))
+class RadioMenuItem(title0: String) extends MenuItem(title0) {
+ override lazy val peer: JRadioButtonMenuItem = new JRadioButtonMenuItem(title0)
}
/**
* @see javax.swing.JCheckBoxMenuItem
*/
-class CheckMenuItem(override val peer: JCheckBoxMenuItem) extends MenuItem(peer) {
- def this(title: String) = this(new JCheckBoxMenuItem(title))
+class CheckMenuItem(title0: String) extends MenuItem(title0) {
+ override lazy val peer: JCheckBoxMenuItem = new JCheckBoxMenuItem(title0)
} \ No newline at end of file
diff --git a/src/swing/scala/swing/Panel.scala b/src/swing/scala/swing/Panel.scala
index b0a85b8f0e..d93f0b065b 100644
--- a/src/swing/scala/swing/Panel.scala
+++ b/src/swing/scala/swing/Panel.scala
@@ -3,4 +3,6 @@ package scala.swing
/**
* @see javax.swing.JPanel
*/
-abstract class Panel(override val peer: javax.swing.JPanel) extends Component(peer) with Container.Wrapper
+abstract class Panel extends Component with Container.Wrapper {
+ override lazy val peer: javax.swing.JPanel = new javax.swing.JPanel
+}
diff --git a/src/swing/scala/swing/ProgressBar.scala b/src/swing/scala/swing/ProgressBar.scala
index c43b4f523c..463c2fba56 100644
--- a/src/swing/scala/swing/ProgressBar.scala
+++ b/src/swing/scala/swing/ProgressBar.scala
@@ -5,8 +5,8 @@ import event._
/**
* @see javax.swing.JProgressBar
*/
-class ProgressBar(override val peer: javax.swing.JProgressBar) extends Component(peer) with Orientable {
- def this() = this(new javax.swing.JProgressBar)
+class ProgressBar extends Component with Orientable {
+ override lazy val peer: javax.swing.JProgressBar = new javax.swing.JProgressBar
def min: Int = peer.getMinimum
def min_=(v: Int) { peer.setMinimum(v) }
diff --git a/src/swing/scala/swing/PushButton.scala b/src/swing/scala/swing/PushButton.scala
index 39a1bc0dc7..245f443119 100644
--- a/src/swing/scala/swing/PushButton.scala
+++ b/src/swing/scala/swing/PushButton.scala
@@ -6,8 +6,8 @@ import event._
/**
* @see javax.swing.JButton
*/
-class PushButton(override val peer: JButton) extends Button(peer) with Publisher {
- def this(txt: String) = this(new JButton(txt))
+class PushButton(text0: String) extends Button with Publisher {
+ override lazy val peer: JButton = new JButton(text0)
def this() = this("")
def this(a: Action) = {
this("")
diff --git a/src/swing/scala/swing/RadioButton.scala b/src/swing/scala/swing/RadioButton.scala
index b2d37a71e4..c863375f38 100644
--- a/src/swing/scala/swing/RadioButton.scala
+++ b/src/swing/scala/swing/RadioButton.scala
@@ -5,7 +5,7 @@ import javax.swing._
/**
* @see javax.swing.JRadioButton
*/
-class RadioButton(override val peer: JRadioButton) extends ToggleButton(peer) {
- def this(text: String) = this(new JRadioButton(text))
- def this() = this(new JRadioButton)
+class RadioButton(text0: String) extends ToggleButton {
+ override lazy val peer: JRadioButton = new JRadioButton(text0)
+ def this() = this("")
} \ No newline at end of file
diff --git a/src/swing/scala/swing/ScrollPane.scala b/src/swing/scala/swing/ScrollPane.scala
index f82e814ecb..833d9dacc1 100644
--- a/src/swing/scala/swing/ScrollPane.scala
+++ b/src/swing/scala/swing/ScrollPane.scala
@@ -5,10 +5,12 @@ import javax.swing.JScrollPane
/**
* @see javax.swing.JScrollPane
*/
-class ScrollPane(override val peer: JScrollPane) extends Component(peer) with Container {
- def this() = this(new JScrollPane)
- def this(contents: Component) = this(new JScrollPane(contents.peer))
-
+class ScrollPane extends Component with Container {
+ override lazy val peer: JScrollPane = new JScrollPane
+ def this(c: Component) = {
+ this()
+ viewportView = c
+ }
def contents: Seq[Component] =
List(Component.wrapperFor(peer.getViewport.getView.asInstanceOf[javax.swing.JComponent]))
def contents_=(c: Component) { peer.setViewportView(c.peer) }
diff --git a/src/swing/scala/swing/Separator.scala b/src/swing/scala/swing/Separator.scala
index 7f6fdb8d41..0b7d3e0840 100644
--- a/src/swing/scala/swing/Separator.scala
+++ b/src/swing/scala/swing/Separator.scala
@@ -5,6 +5,7 @@ import javax.swing._
/**
* @see javax.swing.JSeparator
*/
-class Separator(override val peer: JSeparator) extends Component(peer) with Oriented {
- def this() = this(new JSeparator)
+class Separator(o: Orientation.Value) extends Component with Oriented {
+ override lazy val peer: JSeparator = new JSeparator(o.id)
+ def this() = this(Orientation.Horizontal)
}
diff --git a/src/swing/scala/swing/Slider.scala b/src/swing/scala/swing/Slider.scala
index bc0ddd2d85..fe18965ea3 100644
--- a/src/swing/scala/swing/Slider.scala
+++ b/src/swing/scala/swing/Slider.scala
@@ -6,8 +6,8 @@ import Swing._
/**
* @see javax.swing.JSlider
*/
-class Slider(override val peer: javax.swing.JSlider) extends Component(peer) with Orientable with Publisher {
- def this() = this(new javax.swing.JSlider)
+class Slider extends Component with Orientable with Publisher {
+ override lazy val peer: javax.swing.JSlider = new javax.swing.JSlider
def min: Int = peer.getMinimum
def min_=(v: Int) { peer.setMinimum(v) }
diff --git a/src/swing/scala/swing/SplitPane.scala b/src/swing/scala/swing/SplitPane.scala
index a78dfd9840..05d1da2b13 100644
--- a/src/swing/scala/swing/SplitPane.scala
+++ b/src/swing/scala/swing/SplitPane.scala
@@ -6,8 +6,9 @@ import Swing._
/**
* @see javax.swing.JSplitPane
*/
-class SplitPane(override val peer: javax.swing.JSplitPane) extends Component(peer) with Container with Orientable {
- def this(o: Orientation.Value) = this(new javax.swing.JSplitPane(o.id))
+class SplitPane(o: Orientation.Value) extends Component with Container with Orientable {
+ override lazy val peer: javax.swing.JSplitPane = new javax.swing.JSplitPane(o.id)
+ def this() = this(Orientation.Horizontal)
leftComponent = new Component {}
rightComponent = new Component {}
diff --git a/src/swing/scala/swing/TabbedPane.scala b/src/swing/scala/swing/TabbedPane.scala
index 3c906ebad2..7ccd747bd5 100644
--- a/src/swing/scala/swing/TabbedPane.scala
+++ b/src/swing/scala/swing/TabbedPane.scala
@@ -58,11 +58,10 @@ object TabbedPane {
/**
* @see javax.swing.JTabbedPane
*/
-class TabbedPane(override val peer: JTabbedPane) extends Component(peer) with Publisher {
+class TabbedPane extends Component with Publisher {
+ override lazy val peer: JTabbedPane = new JTabbedPane
import TabbedPane._
- def this() = this(new JTabbedPane)
-
object pages extends BufferWrapper[Page] {
def runCount: Int = peer.getTabRunCount
@@ -89,8 +88,12 @@ class TabbedPane(override val peer: JTabbedPane) extends Component(peer) with Pu
def tabLayoutPolicy: Layout.Value = Layout(peer.getTabLayoutPolicy)
def tabLayoutPolicy_=(p: Layout.Value) { peer.setTabLayoutPolicy(p.id) }
- def tabPlacement: EdgePosition.Value = EdgePosition(peer.getTabPlacement)
- def tabPlacement(b: EdgePosition.Value) { peer.setTabPlacement(b.id) }
+
+ def tabPlacement: Alignment.Value = Alignment(peer.getTabPlacement)
+ /**
+ * Possible values are Left, Right, Top, Bottom.
+ */
+ def tabPlacement(b: Alignment.Value) { peer.setTabPlacement(b.id) }
object selection extends Publisher {
def page: Page = pages(index)
diff --git a/src/swing/scala/swing/Table.scala b/src/swing/scala/swing/Table.scala
index 0e7263be21..28695844f6 100644
--- a/src/swing/scala/swing/Table.scala
+++ b/src/swing/scala/swing/Table.scala
@@ -7,7 +7,6 @@ import java.awt.{Dimension, Color}
import event._
import scala.collection.mutable.Set
-
object Table {
object AutoResizeMode extends Enumeration {
import JTable._
@@ -31,16 +30,30 @@ object Table {
/**
* @see javax.swing.JTable
*/
-class Table(override val peer: JTable) extends Component(peer) with Scrollable with Publisher {
+class Table extends Component with Scrollable with Publisher {
+ override lazy val peer: JTable = new JTable {
+ override def getCellRenderer(r: Int, c: Int) = new TableCellRenderer {
+ def getTableCellRendererComponent(table: JTable, value: AnyRef, isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int) =
+ renderer(isSelected, hasFocus, row, column).peer
+ }
+ override def getCellEditor(r: Int, c: Int) = editor(r, c)
+ }
import Table._
- def this() = this(new JTable())
- def this(numRows: Int, numColumns: Int) = this(new JTable(numRows, numColumns))
- def this(rowData: Array[Array[AnyRef]], columnNames: Array[AnyRef]) = this(new JTable(rowData, columnNames))
- //todo: create constructor with List[List[Any]]
- def this(dm: TableModel) = this(new JTable(dm))
- def this(dm: TableModel, cm: TableColumnModel) = this(new JTable(dm, cm))
- def this(dm: TableModel, cm: TableColumnModel, sm: ListSelectionModel) = this(new JTable(dm, cm, sm))
+ def this(rowData: Array[Array[Any]], columnNames: Seq[Any]) = {
+ this()
+ peer.setModel(new AbstractTableModel {
+ override def getColumnName(column: Int) = columnNames(column).toString
+ def getRowCount() = rowData.length
+ def getColumnCount() = columnNames.length
+ def getValueAt(row: Int, col: Int): AnyRef = rowData(row)(col).asInstanceOf[AnyRef]
+ override def isCellEditable(row: Int, column: Int) = true
+ override def setValueAt(value: Any, row: Int, col: Int) {
+ rowData(row)(col) = value
+ fireTableCellUpdated(row, col)
+ }
+ })
+ }
protected def scrollablePeer = peer
@@ -144,30 +157,23 @@ class Table(override val peer: JTable) extends Component(peer) with Scrollable w
/**
* Supplies a renderer component for a given cell.
*/
- protected def render(isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int): Component =
+ def renderer(isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int): Component =
new Component {
- override lazy val peer = initialRenderer.getTableCellRendererComponent(Table.this.peer,
- Table.this.peer.getValueAt(row, column), isSelected, hasFocus, row, column).asInstanceOf[JComponent]
+ override lazy val peer = {
+ val v = Table.this.peer.getValueAt(row, column)
+ Table.this.peer.getDefaultRenderer(v.getClass).getTableCellRendererComponent(Table.this.peer,
+ v, isSelected, hasFocus, row, column).asInstanceOf[JComponent]
+ }
}
- peer.setDefaultRenderer(classOf[AnyRef], new TableCellRenderer {
- def getTableCellRendererComponent(tabBlockIle: JTable, value: AnyRef, isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int) =
- render(isSelected, hasFocus, row, column).peer
- })
+ protected def editor(row: Int, column: Int) =
+ Table.this.peer.getDefaultEditor(Table.this.peer.getValueAt(row, column).getClass)
def apply(row: Int, column: Int) = peer.getValueAt(row, column)
- def update(row: Int, column: Int, value: AnyRef) = peer.setValueAt(value, row, column)
+ def update(row: Int, column: Int, value: Any) = peer.setValueAt(value, row, column)
def markUpdated(row: Int, column: Int) = update(row, column, apply(row, column))
- /*
- peer.addActionListener {
- new java.awt.event.ActionListener {
- def actionPerformed(e: java.awt.event.ActionEvent): unit =
- publish(ButtonPressed(Button.this))
- }
- }
-*/
model.addTableModelListener(new TableModelListener {
def tableChanged(event: TableModelEvent) = publish(
if (event.getType == TableModelEvent.UPDATE)
diff --git a/src/swing/scala/swing/TextArea.scala b/src/swing/scala/swing/TextArea.scala
index 25fba7cfc0..9039e428c6 100644
--- a/src/swing/scala/swing/TextArea.scala
+++ b/src/swing/scala/swing/TextArea.scala
@@ -7,11 +7,11 @@ import event._
/**
* @see javax.swing.JTextArea
*/
-class TextArea(override val peer: JTextArea) extends TextComponent(peer) with TextComponent.HasColumns with TextComponent.HasRows {
- def this(text: String, rows: Int, columns: int) = this(new JTextArea(text, rows, columns))
- def this(text: String) = this(new JTextArea(text))
- def this(rows: Int, columns: int) = this(new JTextArea(rows, columns))
- def this() = this(new JTextArea())
+class TextArea(text0: String, rows0: Int, columns0: int) extends TextComponent with TextComponent.HasColumns with TextComponent.HasRows {
+ override lazy val peer: JTextArea = new JTextArea(text0, rows0, columns0)
+ def this(text: String) = this(text, 0, 0)
+ def this(rows: Int, columns: int) = this("", rows, columns)
+ def this() = this("", 0, 0)
// TODO: we could make contents StringBuilder-like
def append(t: String) { peer.append(t) }
diff --git a/src/swing/scala/swing/TextComponent.scala b/src/swing/scala/swing/TextComponent.scala
index a5779f6826..687076a3a7 100644
--- a/src/swing/scala/swing/TextComponent.scala
+++ b/src/swing/scala/swing/TextComponent.scala
@@ -19,7 +19,8 @@ object TextComponent {
/**
* @see javax.swing.JTextComponent
*/
-class TextComponent(override val peer: JTextComponent) extends Component(peer) with Publisher {
+class TextComponent extends Component with Publisher {
+ override lazy val peer: JTextComponent = new JTextComponent {}
def text: String = peer.getText
def text_=(t: String) = peer.setText(t)
diff --git a/src/swing/scala/swing/TextField.scala b/src/swing/scala/swing/TextField.scala
index a437596204..f5a7342be1 100644
--- a/src/swing/scala/swing/TextField.scala
+++ b/src/swing/scala/swing/TextField.scala
@@ -7,11 +7,11 @@ import event._
/**
* @see javax.swing.JTextField
*/
-class TextField(override val peer: JTextField) extends TextComponent(peer) with TextComponent.HasColumns {
- def this(text: String, columns: int) = this(new JTextField(text, columns))
- def this(text: String) = this(new JTextField(text))
- def this(columns: int) = this(new JTextField(columns))
- def this() = this(new JTextField())
+class TextField(text0: String, columns0: Int) extends TextComponent with TextComponent.HasColumns {
+ override lazy val peer: JTextField = new JTextField(text0, columns0)
+ def this(text: String) = this(text, 0)
+ def this(columns: Int) = this("", columns)
+ def this() = this("")
def columns: Int = peer.getColumns
def columns_=(n: Int) = peer.setColumns(n)
diff --git a/src/swing/scala/swing/ToggleButton.scala b/src/swing/scala/swing/ToggleButton.scala
index a4a6e3d378..27e86ad3ef 100644
--- a/src/swing/scala/swing/ToggleButton.scala
+++ b/src/swing/scala/swing/ToggleButton.scala
@@ -6,7 +6,7 @@ import event._
/**
* @see javax.swing.JToggleButton
*/
-class ToggleButton(override val peer: JToggleButton) extends Button(peer) {
- def this(txt: String) = this(new JToggleButton(txt))
- def this() = this(new JToggleButton)
+class ToggleButton(text0: String) extends Button {
+ override lazy val peer: JToggleButton = new JToggleButton(text0)
+ def this() = this("")
} \ No newline at end of file
diff --git a/src/swing/scala/swing/test/TableSelection.scala b/src/swing/scala/swing/test/TableSelection.scala
index 6a967bc0cc..cd0d4f40ab 100644
--- a/src/swing/scala/swing/test/TableSelection.scala
+++ b/src/swing/scala/swing/test/TableSelection.scala
@@ -5,14 +5,20 @@ import swing._
import swing.event._
object TableSelection extends SimpleGUIApplication {
- val model = Array[Array[AnyRef]](Array[AnyRef]("Mary", "Campione", "Snowboarding", new java.lang.Integer(5), new java.lang.Boolean(false)),
+ val model = Array(List("Mary", "Campione", "Snowboarding", 5, false).toArray,
+ List("Alison", "Huml", "Rowing", 5, false).toArray,
+ List("Kathy", "Walrath", "Knitting", 5, false).toArray,
+ List("Sharon", "Zakhour", "Speed reading", 5, false).toArray,
+ List("Philip", "Milne", "Pool", 5, false).toArray)
+
+ /*Array[Array[AnyRef]](Array[AnyRef]("Mary", "Campione", "Snowboarding", new java.lang.Integer(5), new java.lang.Boolean(false)),
Array[AnyRef]("Alison", "Huml", "Rowing", new java.lang.Integer(5), new java.lang.Boolean(false)),
Array[AnyRef]("Kathy", "Walrath", "Knitting", new java.lang.Integer(5), new java.lang.Boolean(false)),
Array[AnyRef]("Sharon", "Zakhour", "Speed reading", new java.lang.Integer(5), new java.lang.Boolean(false)),
- Array[AnyRef]("Philip", "Milne", "Pool", new java.lang.Integer(5), new java.lang.Boolean(false)))
+ Array[AnyRef]("Philip", "Milne", "Pool", new java.lang.Integer(5), new java.lang.Boolean(false)))*/
val ui = new BoxPanel(Orientation.Vertical) {
- val table = new Table(model, Array[AnyRef]("First Name", "Last Name", "Sport", "# of Years", "Vegetarian"))
+ val table = new Table(model, Array("First Name", "Last Name", "Sport", "# of Years", "Vegetarian"))
listenTo()
table.preferredViewportSize = new Dimension(500, 70)
//1.6:table.fillsViewportHeight = true