~/home_Jython/berry_py/worldCup/ex01/wc01_JList.py
|INDEX| Java.use(better, Jython)
》作業中です《
#! /usr/bin/env python # coding: utf-8 ## ---------------------------------------- ## ## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部 ## ## ---------------------------------------- ## History: Swing Example "2010 FIFA World Cup South Africa" ## 2003/07, Java/Jython ## 2006/07, Jython ## 2008/02, Jython 2.2.1 ## 2010/06, Jython 2.5.0 #...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 """ >>> tips() >>> ## ---------------------------------------- >>> None version: #1.0.29 """ from __init__ import * ## ---------------------------------------- ## 気軽に Swing〔1〕JList: 予選リーグ全32チーム ## Java.use(better,Swing=Jython) 〜 萬プログラマーのための Python 導入ガイド ## ---------------------------------------- ## ---------------------------------------- ## 2008/03/10《1.1》今回の課題:全32チームの旗を掲げよう ## ---------------------------------------- from os.path import exists from java.awt import Font from javax.swing import ImageIcon from javax.swing import JFrame from javax.swing import JLabel from javax.swing import JList from javax.swing import JPanel from javax.swing import JScrollPane from javax.swing import JSplitPane from javax.swing import ListSelectionModel ## ---------------------------------------- class TeamsListPanel(JPanel): groups = { "A": [ # Group A {"rsa": "South Africa"}, {"mex": "Mexico"}, {"uru": "Uruguay"}, {"fra": "France"}, ], "B": [ # Group B {"arg": "Argentina"}, {"nga": "Nigeria"}, {"kor": "Korea Republic"}, {"gre": "Greece"}, ], "C": [ # Group C {"eng": "England"}, {"usa": "USA"}, {"alg": "Algeria"}, {"svn": "Slovenia"}, ], "D": [ # Group D {"ger": "Germany"}, {"aus": "Australia"}, {"srb": "Serbia"}, {"gha": "Ghana"}, ], "E": [ # Group E {"ned": "Netherlands"}, {"den": "Denmark"}, {"jpn": "Japan"}, {"cmr": "Cameroon"}, ], "F": [ # Group F {"ita": "Italy"}, {"par": "Paraguay"}, {"nzl": "New Zealand"}, {"svk": "Slovakia"}, ], "G": [ # Group G {"bra": "Brazil"}, {"prk": "Korea DPR"}, {"civ": "Cote d Ivoire"}, {"por": "Portugal"}, ], "H": [ # Group H {"esp": "Spain"}, {"sui": "Switzerland"}, {"hon": "Honduras"}, {"chi": "Chile"}, ], } def __init__(self, master, *args, **keys): def teams(): return [e for group in "ABCDEFGH" for team in self.groups[group] for e in team] listPane = self._listPane( teams(), minimumSize = (100,50), valueChanged = self, ) picturePane = self._picturePane( minimumSize = (100,50), ) master.contentPane = self._splitPane( leftComponent = listPane, rightComponent = picturePane, ) self._update() ## ---------------------------------------- def _listPane(self, listData, minimumSize, **keys): def view(listData, **keys): self.list = \ comp = JList( listData, selectionMode = ListSelectionModel.SINGLE_SELECTION, selectedIndex = 0, **keys ) return comp comp = JScrollPane( viewportView = view(listData, **keys), minimumSize = minimumSize, ) return comp def _picturePane(self, minimumSize): def view(): self.picture = \ comp = JLabel( horizontalAlignment = JLabel.CENTER, verticalTextPosition = JLabel.BOTTOM, horizontalTextPosition = JLabel.CENTER, ) comp.font = comp.font.deriveFont(Font.ITALIC) return comp comp = JScrollPane( viewportView = view(), minimumSize = minimumSize, ) return comp def _splitPane(self, **keys): comp = JSplitPane( orientation = JSplitPane.HORIZONTAL_SPLIT, oneTouchExpandable = True, dividerLocation = 120, **keys ) return comp ## ---------------------------------------- def __call__(self, e): # ListSelectionListener.valueChanged self._update() def _update(self): def imageIcon(path): return ImageIcon(path) if exists(path) else None def name(key): for group in self.groups.values(): for team in group: if key in team: return team[key] else: return None e = self.list.selectedValue icon = imageIcon("squad/%s.gif"%e) self.picture.icon = icon self.picture.text = name(e) if icon else "Image not found" ## ---------------------------------------- def tips(): frame = JFrame( title = "2010 FIFA World Cup South Africa", size = (340,200), defaultCloseOperation = JFrame.EXIT_ON_CLOSE, locationRelativeTo = None, ) TeamsListPanel(frame) frame.show() #=============================================================================== # 2008/03/11《1.2》Swing:JList #------------------------------------------------------------------------------ # javax.swing.JList # public JList(Object[] listData) # public void setListData(Object[] listData) #=============================================================================== #ex="ex_java_awt_Color" def ex_java_awt_Color(): from java.awt import Color def paintColor(e): s = e.source.selectedValue colorView.background = getattr(Color, s) listData = [ 'black', 'blue', 'cyan', 'darkGray', 'gray', 'green', 'lightGray', 'magenta', 'orange', 'pink', 'red', 'white', 'yellow', ] listView = JList( listData=listData, valueChanged=paintColor, ) colorView = JPanel() frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="java.awt.Color", preferredSize=(180, 160), ) frame.add(JScrollPane(listView), BorderLayout.WEST) frame.add(colorView, BorderLayout.CENTER) frame.pack() frame.show() #=============================================================================== # See Also: # def ex_java_awt_Color() #=============================================================================== #ex="ex_java_awt_Color1" class ColorListPanel(JPanel): def __init__(self, listData): self.layout = BorderLayout() e = self.listView = JList( listData=listData, valueChanged=self.valueChanged, ) self.add(JScrollPane(e), BorderLayout.WEST) e = self.colorView = JPanel( preferredSize=(120, 100), ) self.add(e, BorderLayout.CENTER) def valueChanged(self, e): s = e.source.selectedValue self.colorView.background = getattr(Color, s) def ex_java_awt_Color1(): listData = [ 'black', 'blue', 'cyan', 'darkGray', 'gray', 'green', 'lightGray', 'magenta', 'orange', 'pink', 'red', 'white', 'yellow', ] frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="java.awt.Color #1", ) frame.add(ColorListPanel(listData)) frame.pack() frame.show() #=============================================================================== # 2007/05/28《41》JList(1)もっと表示できるかな #------------------------------------------------------------------------------ # javax.swing.JList # public JList(Object[] listData) # public void setListData(Object[] listData) #=============================================================================== #ex="ex_JList" def ex_JList(): listData = list("ABCDEFGH") view = JList( listData=listData, # the array of Objects to be loaded into the data model ) frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title=JList.__name__, ) frame.add(JScrollPane(view)) frame.pack() frame.show() #=============================================================================== # javax.swing.JList # public void setLayoutOrientation(int layoutOrientation) # public void setVisibleRowCount(int visibleRowCount) #=============================================================================== #ex="ex_JList_layoutOrientation" def ex_JList_layoutOrientation(): layoutOrientation = {} for e in (# default: VERTICAL 'VERTICAL' , # vertically in one column 'VERTICAL_WRAP' , # horizontally, wrapping to a new row 'HORIZONTAL_WRAP', # vertically, wrapping to a new column ): layoutOrientation[e] = getattr(JList, e) listData = ["item%2d"%e for e in range(1, 13)] x, y, width, height = 10, 0, 210, 92 for i, (title, layoutOrientation) in enumerate( layoutOrientation.items()): view = JList( listData=listData, layoutOrientation=layoutOrientation, # New orientation, one of JList.HORIZONTAL_WRAP, # JList.VERTICAL or JList.VERTICAL_WRAP. visibleRowCount=-1, # an integer specifying the preferred number of # visible rows ) frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title=title, bounds=((x+width)*i, y, width, height), ) frame.add(JScrollPane(view)) frame.show() #=============================================================================== # 2007/05/29《42》JList(2)もっと選択できるかな #------------------------------------------------------------------------------ # javax.swing.DefaultListModel # void setSelectionMode(int selectionMode) #=============================================================================== #ex="ex_JList_selectionMode" def ex_JList_selectionMode(): selectionMode = {} for e in ( 'SINGLE_SELECTION' , # only one list index 'SINGLE_INTERVAL_SELECTION' , # one contiguous index interval 'MULTIPLE_INTERVAL_SELECTION', # there's no restriction ): selectionMode[e] = getattr(ListSelectionModel, e) listData = ["item%2d"%e for e in range(1, 10)] x, y, width, height = 10, 0, 280, 180 for i, (title, selectionMode) in enumerate( selectionMode.items()): view = JList( listData=listData, selectionMode=selectionMode, # an integer specifying the type of selections # that are permissible ) frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title=title, bounds=((x+width)*i, y, width, height), ) frame.add(JScrollPane(view)) frame.show() #=============================================================================== # 2007/05/30《43》JList(3)選択したらどうなるの #------------------------------------------------------------------------------ # javax.swing.JList # public Object getSelectedValue() # public int getSelectedIndex() # javax.swing.event.ListSelectionListener # public void valueChanged(ListSelectionEvent e) #=============================================================================== #ex="ex_JList_valueChanged" def ex_JList_valueChanged(): from pawt import colors def valueChanged(e): # e - the event that characterizes the change. s = e.source.selectedValue colorView.background = getattr(colors, s) listData = [e for e in dir(colors) if not e.startswith("_")] listView = JList( listData=listData, layoutOrientation=JList.VERTICAL_WRAP, visibleRowCount=-1, valueChanged=valueChanged, # Called whenever the value of the selection changes. ) colorView = JPanel( preferredSize=(100, 100), ) frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="JList: pawt.colors", bounds=(0, 0, 360, 128), ) frame.add(JScrollPane(listView), BorderLayout.CENTER) frame.add(colorView, BorderLayout.EAST) # frame.pack() frame.show() #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ #=============================================================================== # See Also: # def ex_java_awt_Color() #=============================================================================== #ex="exJPanel_color" def exJPanel_color(): panel = JPanel(layout=BorderLayout()) color = [e for e in dir(colors) if not e.startswith("__")] def paint(e): panel.background = getattr(colors, e.source.selectedValue) view = JList(listData=color, valueChanged=paint) panel.add(JScrollPane(view), BorderLayout.WEST) frame = JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(220, 100), title="JPanel #colors") frame.add(panel) frame.visible = True from pawt import colors def ex_pawt_Color(): listData = [ e for e in dir(colors) if not e.startswith("_") ] frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="from pawt import colors", ) def this_valueChanged(e): panel.colorView.background = eval( "colors.%s"%e.source.selectedValue) panel = ColorListPanel(listData) panel.listView.valueChanged = this_valueChanged frame.add(panel) frame.pack() frame.show() #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ #=============================================================================== # 2007/05/31《44》JList(4)モデルになってくれませんか #------------------------------------------------------------------------------ # javax.swing.JList # public JList(ListModel dataModel) # public void setModel(ListModel model) # javax.swing.DefaultListModel # public void addElement(Object obj) # public Object remove(int index) #=============================================================================== #ex="ex_DefaultListModel" def ex_DefaultListModel(): model = DefaultListModel() for e in "ABCDEFGH": model.addElement(e) listView = JList( model=model, ) frame = JFrame( defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="DefaultListModel", bounds=(0, 0, 200, 100), ) frame.add(JScrollPane(listView)) frame.visible = True #=============================================================================== # #=============================================================================== from random import * def exSw_JList_stack(): def push(e): view.model.addElement("item #%2d"%(random()*100)) def pop(e): index = view.model.size() if index > 0: view.model.remove(index-1) else: print ">>> stack is empty" def pop(e): view.model.remove(view.model.size()-1) if view.model.empty: e.source.enabled = False view = JList(model=DefaultListModel()) panel = JPanel(preferredSize=(80, 100)) for e, b in (push, True), (pop, False): panel.add(JButton( label=e.__name__, enabled=b, actionPerformed=e)) frame = JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="JList: stack", bounds=(0, 0, 200, 100)) frame.add(JScrollPane(view), BorderLayout.CENTER) frame.add(panel, BorderLayout.EAST) frame.visible = True #=============================================================================== # public void addListSelectionListener(ListSelectionListener listener) #=============================================================================== from javax.swing.event import ListSelectionListener def ex04_ListSelectionListener(): model = DefaultListModel() for e in "ABCDEFGH": model.addElement(e) class Listener(ListSelectionListener): def valueChanged(self, e): index = e.source.selectedIndex value = e.source.selectedValue print "%d: %s"%(index, value) view = JList(model=model) view.addListSelectionListener(Listener()) frame = JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(250, 100), title="JList #ListSelectionListener") frame.add(JScrollPane(view)) frame.visible = True #=============================================================================== # #=============================================================================== class ListPanel(JPanel, ListSelectionListener): def __init__(self, model): self.layout = BorderLayout() self.model = self._model(model) self.list = self._list() self.field = self._field() def _model(self, data): model = DefaultListModel() for e in data: model.addElement(e) return model def _list(self): view = JList( model=self.model, valueChanged=self.valueChanged) self.add(JScrollPane(view), BorderLayout.CENTER) return view def _field(self): comp = JTextField() self.add(comp, BorderLayout.SOUTH) return comp def valueChanged(self, e): self.field.text = e.source.selectedValue def ex06_JList_Panel(): frame = JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="dir(JList)") frame.add(ListPanel(dir(JList))) frame.pack() frame.visible = True #=============================================================================== # javax.swing.DefaultListModel # void addElement(Object obj) # void clear() #=============================================================================== def exJList_edit(): listData = dir(str) model = DefaultListModel() for e in listData: model.addElement(e) view = JList(model=model) def action(e): if e.source.isSelected(): data = listData else: data = [e for e in listData if not e.startswith("__")] view.model.clear() for e in data: view.model.addElement(e) button = JCheckBox( label="built-in", selected=True, actionPerformed=action) panel = JPanel(layout=BorderLayout()) panel.add(JScrollPane(view), BorderLayout.CENTER) panel.add(button, BorderLayout.NORTH) frame = JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(150, 100), title="JList") frame.add(panel) frame.visible = True def exJList_edit2(): object = str listData = dir(object) model = DefaultListModel() for e in listData: model.addElement(e) def action(e): if e.source.isSelected(): data = listData else: data = [e for e in listData if not e.startswith("__")] listView.model.clear() for e in data: listView.model.addElement(e) button = JCheckBox( label="built-in", selected=True, actionPerformed=action) def valueChanged(e): attr = getattr(object, e.source.selectedValue) textView.text = attr.__class__.__name__ listView = JList(model=model, valueChanged=valueChanged) textView = JTextArea() panel = JPanel(layout=BorderLayout()) panel.add(JScrollPane(listView), BorderLayout.CENTER) panel.add(button, BorderLayout.NORTH) # frame = JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE, frame = JFrame( size=(250, 100), title="JList") frame.add(panel, BorderLayout.WEST) frame.add(JScrollPane(textView), BorderLayout.CENTER) frame.visible = True #=============================================================================== # dir(JList) #=============================================================================== def ex00_dir_JList(): def valueChanged(e): index = e.source.selectedIndex value = e.source.selectedValue print "%s: %s"%(index, value) frame = JFrame(defaultCloseOperation=JFrame.EXIT_ON_CLOSE, title="dir(JList)", ) frame.add(JScrollPane( JList(listData=dir(JList), valueChanged=valueChanged))) frame.pack() frame.visible = True #=============================================================================== def _ex_dir(ex): instance = JList() c = JList() c.model = DefaultListModel() c.addListSelectionListener(Dir_Listener(instance)) for s in dir(instance): c.model.addElement(s) J = ExFrame((0, 0), (250, 200), instance.__class__.__name__) frame = J.frame frame.add(JScrollPane(c)) frame.visible = True class Dir_Listener(ListSelectionListener): def __init__(self, instance): self.inst = instance def valueChanged(self, e): r = e.source.selectedValue x = self.inst print "%s: %s"%(r, eval('type(x.%s)'%r)) #------------------------------------------------------------------------------ ##exec "print_ex('%s'); %s()"%(ex, ex) #=============================================================================== ## ---------------------------------------- from doctest import testmod if __name__=='__main__': inform() testmod() ## ========================================