~/home_Jython/JFC-Swing/JTable_/ColorChart-JTable/colorJTable.py

INDEX Python.use(better, Java) #Jython

》作業中です《


#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
#...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
"""
>>> tips()

>>> ## ----------------------------------------
>>> None
version: #1.0.18
"""
## ---------------------------------------- bash
"""
stty erase ^H
PS1="$ "
alias jython="/Users/sketch/home_Jython/_release/jython2.5.0/bin/jython"
"""
## ---------------------------------------- Java/Jython
## ---------------------------------------- JFC/Swing
## ---------------------------------------- demo: java
## ---------------------------------------- demo: jython
"""
$ cd ~/home_Jython/apple_/swingBeans/
$ jython -i swingColor3.py

"""
## ----------------------------------------
from javax.swing import JFrame

def tips():
    frame = JFrame(
        title = "Color",
        size = (350,120),
        defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
        )
    TIPS(master = frame)
    frame.visible = True

## ----------------------------------------
from javax.swing import JPanel
from javax.swing import JScrollPane
from javax.swing import JSplitPane
from javax.swing import JTable
from javax.swing.table import DefaultTableModel

from pawt import colors

class TIPS():
####    colorNames = sorted(list(vars(colors)))
    columnNames = "name","red","green","blue",
    colorNames = [e for e in dir(colors) if not e.startswith("_")]

    def __init__(self, master, *args, **keys):
        canvasPane = self._canvasPane(
            minimumSize = (50,100),
            )
        controlPane = self._controlPane(
            columnNames = self.columnNames,
            colorNames = self.colorNames,
            valueChanged = Command(self),
            minimumSize = (80,100),
            )
        self.splitPane = self._splitPane(
            leftComponent = canvasPane,
            rightComponent = controlPane,
            )
        master.contentPane = self.splitPane

    def _canvasPane(self, **keys):
        comp = JPanel(**keys)
        self.canvas = comp
        return comp

    def _controlPane(self, columnNames, colorNames, valueChanged, **keys):
        def _tableModel():
            model = DefaultTableModel()
            for e in columnNames:
                model.addColumn(e)
            for e in colorNames:
                c = getattr(colors, e)
                model.addRow([e, c.red, c.green, c.blue])
            return model

        def _table():
            comp = JTable(
                model = _tableModel(),
                )
            # addListSelectionListener
            comp.selectionModel.valueChanged = valueChanged
##            comp.columnModel.selectionModel.valueChanged = valueChanged
            column = comp.columnModel.getColumn(0)
            column.preferredWidth = 200
            return comp
        
        self.table = _table()

        pane = JScrollPane(
            viewportView = self.table,
            **keys
            )
        return pane

    def _splitPane(self, **keys):
        pane = JSplitPane(
            orientation = JSplitPane.HORIZONTAL_SPLIT,
            dividerLocation = 100,
            **keys
            )
        return pane        

    def _update(self, value):
        self.canvas.background = getattr(colors, value)

## ----------------------------------------
class Command:
    def __init__(self, client):
        self.client = client
        
    def __call__(self, e):                  # ListSelectionListener
        table = self.client.table
        row = table.selectionModel.leadSelectionIndex
##        column = table.columnModel.selectionModel.leadSelectionIndex
        value = table.getValueAt(row, 0)    # getValueAt(row, column)
        self.client._update(value)

## ----------------------------------------
## ----------------------------------------
from time import ctime
from sys import argv, version

def inform(n=60):
    print("="*n)
    print("Version: %s"%version.split("\n")[0])
    print("Module : %s"%argv[0].split("/")[-1])
    print("Date   : %s"%ctime())
    print("="*n)

## ----------------------------------------
from doctest import testmod

if __name__=='__main__':
    inform()
    testmod()

## ========================================

Last updated♪2010/03/25