alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Scala example source code file (TableSelection.scala)

This example Scala source code file (TableSelection.scala) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Scala tags/keywords

awt, buttonclicked, buttonclicked, buttongroup, buttongroup, interval, label, list, list, radiobutton, rows, scrollpane, selection, selection, table

The Scala TableSelection.scala source code

package scala.swing
package test

import java.awt.Dimension
import swing.event._

object TableSelection extends SimpleSwingApplication {
  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)
  /*val model = Array.tabulate(10000) { i => 
    List("Mary", "Campione", "Snowboarding", i, false).toArray                
  }*/
  
  lazy val ui = new BoxPanel(Orientation.Vertical) {
    val table = new Table(model, Array("First Name", "Last Name", "Sport", "# of Years", "Vegetarian")) {
      preferredViewportSize = new Dimension(500, 70)
    }
    //1.6:table.fillsViewportHeight = true
    listenTo(table.selection)
      
    contents += new ScrollPane(table)
    contents += new Label("Selection Mode")
      
    def radio(mutex: ButtonGroup, text: String): RadioButton = {
      val b = new RadioButton(text)
      listenTo(b)
      mutex.buttons += b
      contents += b
      b
    }
      
    val intervalMutex = new ButtonGroup
    val multiInterval = radio(intervalMutex, "Multiple Interval Selection")
    val elementInterval = radio(intervalMutex, "Single Selection")
    val singleInterval = radio(intervalMutex, "Single Interval Selection")
    intervalMutex.select(multiInterval)
    
    contents += new Label("Selection Options")
    val elemMutex = new ButtonGroup
    val rowSelection = radio(elemMutex, "Row Selection")
    val columnSelection = radio(elemMutex, "Column Selection")
    val cellSelection = radio(elemMutex, "Cell Selection")
    elemMutex.select(rowSelection)
            
    val output = new TextArea(5, 40) { editable = false }
    contents += new ScrollPane(output)
      
    def outputSelection() {
      output.append("Lead: " + table.selection.rows.leadIndex + "," + 
          table.selection.columns.leadIndex + ". ")
      output.append("Rows:")
      for (c <- table.selection.rows) output.append(" " + c)
      output.append(". Columns:")
      for (c <- table.selection.columns) output.append(" " + c)
      output.append(".\n")
    }
      
    reactions += {
      case ButtonClicked(`multiInterval`) => 
        table.selection.intervalMode = Table.IntervalMode.MultiInterval
        if (cellSelection.selected) {
          elemMutex.select(rowSelection)
          table.selection.elementMode = Table.ElementMode.None
        }
        cellSelection.enabled = false
      case ButtonClicked(`elementInterval`) =>
        table.selection.intervalMode = Table.IntervalMode.Single
        cellSelection.enabled = true
      case ButtonClicked(`singleInterval`) =>
        table.selection.intervalMode = Table.IntervalMode.SingleInterval
        cellSelection.enabled = true
      case ButtonClicked(`rowSelection`) => 
        if (rowSelection.selected) 
          table.selection.elementMode = Table.ElementMode.Row
      case ButtonClicked(`columnSelection`) =>
        if (columnSelection.selected) 
          table.selection.elementMode = Table.ElementMode.Column
      case ButtonClicked(`cellSelection`) =>
        if (cellSelection.selected) 
          table.selection.elementMode = Table.ElementMode.Cell
      case TableRowsSelected(_, range, false) => 
        output.append("Rows selected, changes: " + range + "\n")
        outputSelection()
      case TableColumnsSelected(_, range, false) => 
        output.append("Columns selected, changes " + range + "\n")
        outputSelection()
    }
  }
  
  def top = new MainFrame {
    title = "Table Selection"
    contents = ui
  }
}

Other Scala examples (source code examples)

Here is a short list of links related to this Scala TableSelection.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.