berry/colorChart/scala/colorTable.scala

  1: //..+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
  2: package berry.colorChart.scala
  3: 
  4: import java.awt.Color
  5: import javax.swing.table.DefaultTableModel
  6: import swing._
  7: import swing.event._
  8: 
  9: // ----------------------------------------
 10: object ColorTable {
 11:   val version =          ColorTable
 12:     .getClass.getName+": #1.0.20a"
 13: }
 14: 
 15: // ----------------------------------------
 16: class ColorTable extends FlowPanel {
 17: 
 18:   val columnNames = Array("name","red","green","blue")
 19:   val colorNames = Map(
 20:     "red"     -> Color.red,
 21:     "green"   -> Color.green,
 22:     "blue"    -> Color.blue,
 23:     "cyan"    -> Color.cyan,
 24:     "magenta" -> Color.magenta,
 25:     "yellow"  -> Color.yellow,
 26:     "black"   -> Color.black,
 27:     "white"   -> Color.white
 28:   )
 29:   val items = for *1
 47:       }
 48:     }
 49:     peer.getColumnModel.getColumn(0).setPreferredWidth(120)
 50:     Command.listenTo(selection)
 51:   }
 52:   val controlPane = new ScrollPane {
 53:     contents = control
 54:     preferredSize = new Dimension(200,150)
 55:   }
 56: 
 57:   contents += new SplitPane(
 58:     Orientation.Vertical,
 59:     controlPane,
 60:     canvasPane) {
 61:     dividerLocation = 200
 62:   }
 63: 
 64:   // ----------------------------------------
 65:   def update(source: Table) {
 66:     val row = source.selection.rows.leadIndex
 67:     val value = source.model.getValueAt(row, 0)
 68:     canvasPane.background = colorNames(value.toString)
 69:   }
 70: 
 71:   // ----------------------------------------
 72:   object Command extends Publisher {
 73:     reactions += {
 74:       case TableRowsSelected(source, range, adjusting) =>
 75:         update(source)
 76:     }
 77:   }
 78: }
 79: 
 80: // ========================================

*1:key, value) <- colorNames) yield { key } 30: 31: // ---------------------------------------- 32: val canvasPane = new FlowPanel { 33: preferredSize = new Dimension(100,100) 34: } 35: 36: val control = new Table() { 37: model = new DefaultTableModel { 38: for (e <- columnNames) { 39: addColumn(e) 40: } 41: for ((name, color) <- colorNames.toArray) { 42: addRow(Array[java.lang.Object]( 43: name, 44: color.getRed .toString, 45: color.getGreen.toString, 46: color.getBlue .toString