berry/colorChart/jython/colorTable.py

  1: #! /usr/bin/env python
  2: # coding: utf-8
  3: ## ----------------------------------------
  4: ##
  5: ## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
  6: ##
  7: ## ----------------------------------------
  8: #...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
  9: """
 10: >>> tips()
 11: 
 12: >>> ## ----------------------------------------
 13: >>> None
 14: version: #1.0.30
 15: """
 16: ## ---------------------------------------- demo: jython
 17: """
 18: _jython=/Users/sketch/book/java_useBetter_1/_jython
 19: 
 20: cd /Users/sketch/book/java_useBetter_1/berry/colorChart/jython/
 21: JYTHONPATH=$_jython jython -i colorTable.py
 22: ============================================================
 23: Version: 2.5.0 (Release_2_5_0:6476, Jun 16 2009, 13:33:26) 
 24: Module : colorList.py
 25: Date   : Tue Sep 21 01:20:26 2010
 26: ============================================================
 27: """
 28: ## ----------------------------------------
 29: from javax.swing import JPanel
 30: from javax.swing import JScrollPane
 31: from javax.swing import JSplitPane
 32: from javax.swing import JTable
 33: from javax.swing.table import DefaultTableModel
 34: from pawt import colors
 35: 
 36: class TIPS():
 37:     columnNames = "name","red","green","blue",
 38:     colorNames = [e for e in dir(colors) if not e.startswith("_")]
 39: 
 40:     def __init__(self, master):
 41:         def canvasPane():
 42:             self.canvas = \
 43:             pane = JPanel()
 44:             return pane
 45: 
 46:         def controlPane():
 47:             def model_():
 48:                 model = DefaultTableModel()
 49:                 for e in self.columnNames:
 50:                     model.addColumn(e)
 51:                 for e in self.colorNames:
 52:                     c = getattr(colors, e)
 53:                     model.addRow([e, c.red, c.green, c.blue])
 54:                 return model
 55:             def comp_():
 56:                 self.table = \
 57:                 comp = JTable(
 58:                     model = model_(),
 59:                     )
 60:                 comp.selectionModel.valueChanged = Command(self)
 61: ##                comp.columnModel.selectionModel.valueChanged = valueChanged
 62:                 column = comp.columnModel.getColumn(0)
 63:                 column.preferredWidth = 200
 64:                 return comp            
 65:             pane = JScrollPane(
 66:                 viewportView = comp_(),
 67:                 )
 68:             return pane
 69: 
 70:         def splitPane():
 71:             pane = JSplitPane(
 72:                 orientation = JSplitPane.HORIZONTAL_SPLIT,
 73:                 leftComponent  = controlPane(),
 74:                 rightComponent = canvasPane(),
 75:                 dividerLocation = 350,
 76:                 )
 77:             return pane        
 78: 
 79:         master.contentPane = splitPane()
 80:         master.pack()
 81: 
 82:     ## ----------------------------------------
 83:     def _update(self, value):
 84:         self.canvas.background = getattr(colors, value)
 85: 
 86: ## ----------------------------------------
 87: class Command:
 88:     def __init__(self, client):
 89:         self.client = client
 90:         
 91:     def __call__(self, e):                  # ListSelectionListener
 92:         table = self.client.table
 93:         row = table.selectionModel.leadSelectionIndex
 94: ##        column = table.columnModel.selectionModel.leadSelectionIndex
 95:         value = table.getValueAt(row, 0)
 96:         self.client._update(value)
 97: 
 98: ## ----------------------------------------
 99: from javax.swing import JFrame
100: 
101: def tips():
102:     frame = JFrame(
103:         title = "color: JTable",
104:         locationRelativeTo = None,
105:         defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
106:         )
107:     TIPS(master = frame)
108:     frame.visible = True
109: 
110: ## ----------------------------------------
111: from __init__ import *
112: ##tips = TIPS.tips
113: 
114: if __name__=='__main__':
115:     inform()
116:     testmod()
117: 
118: ## ========================================