Similar documents
piyo0704a.rtfd


PowerPoint Presentation

ガイダンス

ガイダンス

PowerPoint Presentation



文字列操作と正規表現

Microsoft PowerPoint - swing3.ppt

次の演習課題(1),(2)のプログラムを完成させよ

Prog2_12th

Prog2_6th

Microsoft PowerPoint - prog12.ppt

Prog2_6th

GUI プログラミング第 4 Graph ~ 手書認識と関数グラフ描画 ~ マウスで数式を書いて認識し 関数グラフを描画する < 手書認識とグラフ描画のステップ> ステップ 1_1 フレームの作成 ステップ 1_2 マウスで自由に線を書く ステップ 2-1 手書認識認識結果を標準出力する ステップ

ガイダンス

Microsoft PowerPoint - swing2.ppt

Android Layout SDK プログラミング マニュアル

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

デジタル表現論・第4回

Prog1_15th

Prog1_6th

基礎計算機演習 実習課題No6

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - chap10_OOP.ppt

Microsoft PowerPoint ppt

Java言語 第1回

プログラミング基礎I(再)

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

intra-mart Accel Platform — Slack連携モジュール 利用ガイド   初版  

第1章 ビジュアルプログラミング入門

awt の主要なクラスを下記に示す クラス Component Container Button Label Panel Frame 説明画面にユーザインターフェイス要素として表示し, ユーザとのやり取りを行うコンポーネントを表すすべてのコンポーネントのスーパークラスになる ほかのコンポーネントを含

ÿþ˜u#u·0¹0Æ0à0

メソッドのまとめ

Java 2 - Lesson01

Microsoft PowerPoint ppt

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

C#の基本2 ~プログラムの制御構造~

< F2D B825082CC96E291E82E6A7464>

JavaプログラミングⅠ

brieart変換設定画面マニュアル

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

<4D F736F F F696E74202D AC C8899E D834F E >

プログラミング入門1

PowerPoint プレゼンテーション

JEB Plugin 開発チュートリアル 第3回

Java言語 第1回

I 4 p.2 4 GUI java.awt.event.* import /* 1 */ import mouseclicked MouseListener implement /* 2 */ init addmouselistener(this) this /* 3 */ this mousec

C#の基本

Java 2 - Lesson01

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

Prog1_3rd

Java - Visual Editor

マニュアルの表記 呼称について本マニュアルでは以下の呼称を使用しています DataNature Smart 管理ツール :DN 管理ツール DataNature Smart クライアント :DN クライアント 画面に表示されるコマンド名などの文字コマンド名やダイアログボックス名など 画面上の固有の文

Java講座

プログラミング入門1

Microsoft PowerPoint - OOP.pptx

JAVA とテンプレート

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Prog1_10th

< F2D82518E9F8AD CC834F CC8CFC82AB82C68D4C>

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

微分方程式 モデリングとシミュレーション

デジタル表現論・第6回

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

コンテンツメディアプログラミング実習2

JAVA入門

Prog1_2nd

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

IT プロジェクト

Prog2_10th

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Prog1_10th

EnSight 10.1の新機能

ポインタ変数

ガイダンス

CONTENTS マニュアルの表記... S01-13_01 1.DataNature Smart 全体概要図... S01-13_11 2. 基本操作... S01-13_ Web レポートの表示... S01-13_ 画面構成... S01-13_ 集計表 /

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

< F2D E E6A7464>

< F2D B838A835882CC8CF68EAE2E6A7464>

Prog2_5th

UMLプロファイル 機能ガイド

< F2D82518E9F8AD CC95BD8D7388DA93AE2E6A7464>

PowerPoint プレゼンテーション

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

Prog2_6th

Microsoft PowerPoint - prog11.ppt

目次 1. アニメーションの仕組み 3 2. ワードアートでムービーのタイトルを作成 7 3. まとめ 課題にチャレンジ 19 [ アニメーション ] 機能 PowerPoint に搭載されている [ アニメーション ] 機能を使用すると 文字や図形にアニメーション ( さまざまな動きや

メディプロ1 Javaサーブレット補足資料.ppt

< F2D F B834E2E6A7464>

情報処理Ⅰ

ガイダンス

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

JAVA入門

基本情報STEP UP演習Java対策

Transcription:

気軽に Swing 6 TransferHandler: DnD Java.use(better,Swing=Jython) 萬プログラマーのための Python 導入ガイド 本間りす 森こねこ 著 小泉ひよ子とタマゴ倶楽部 監修 実際のアプリケーション開発を疑似体験できるように 問題解決に至るまでの紆余曲折 を示しながら 繰り返し段階的に 技術を習得するための話題を提供します OOP Object-Oriented Programming を体得するには 五感を通してフィードバックが 得られる論理的シミュレーションによって 現実世界を疑似体験するのが効果的です この連載で Java の常識が壊れるかもしれませんが OOP の可能性は広がります ラベルの上にマウスカーソルを移動すると ツールチップが現われます はじめに この連載<@.aspx>の基調となる 1 アプリケーション開発 2 Swing/ Jython の解説 3 支援ツール作成が三位一体となって 読者のみなさんの学習を 支援します 今回は TransferHandler に着目します 対象読者 こんな症状を抱えているなら (@.@) Java で構築されたレガシーシステムを再構成したい 効能 既存のリソースを再利用しつつ 同時に開発効率を改善できるかも 注意 連載の主旨から 先に示したプログラムが後で覆される 事例が含まれます 次の展開 失敗から何を学ぶか/学ばないか を予想しながら読み進むのも一興です Swing TransferHandler ラベルは 情報を提示するのが目的で ボタンのように処理を起動しません しか し ドラッグ&ドロップを活用すると 処理を起動する部品としても利用できます ま た その対象ごとに異なる処理を割り当てることで 柔軟な対処が可能となります 例題1a ラベルをドラッグ&ドロップして テキスト領域に表示したい 1 ラベルの上にマウスカーソルを移動して マウスボタンを押したまま 2 テキ スト領域までドラッグ&ドロップすると 3 ラベルと同じ文字列が表示されます こ れを実現したのが 次のコードです def ex_dnd_jlabel(): def mousepressed(e): comp = e.source comp.transferhandler.exportasdrag( comp, # holding the data to be transferred e, # triggered the transfer TransferHandler.COPY, )

iconview = JPanel(layout=GridLayout(-1, 1)) for e in "Japan", "Canada", "Virgin Islands": iconview.add(jlabel( icon=imageicon("flags/%s.gif"%e), text=e, tooltiptext=e, mousepressed=mousepressed, transferhandler=transferhandler("text"), # Here goes! (@.@) ))... クラス TransferHandler データ転送を扱うハンドラー TransferHandler は イベントが発生すると 指定 されたコンポーネントのデータを仲介して 他のコンポーネントに転送します public void exportasdrag( JComponent comp, InputEvent e, int action) メソッド exportasdrag() は 各プラットホームごとに用意された ドラッグ&ド ロップ操作を起動します 引数 comp には 転送したいデータを保持するコンポーネン トを指定します 引数 e には データ転送を誘因するイベントを指定します 引数 action は データ転送の動作を規定するもので COPY/MOVE/LINK が有効です ラベルを再設定するには 例題1b テキストをドラッグ&ドロップして ラベルを再設定したい ラベルを選択するとイベントが発生して 1 リスナーでもある自身に設定された mousepressed が呼び出されます すると 2 ハンドラー transferhandler を介 して ラベルが保持するテキスト文字列 text を送信 exportasdrag します public void settransferhandler(transferhandler newhandler) メソッド settransferhandler() は 任意のコンポーネントを ドラッグ&ド ロップによるデータ転送の情報源に指定します 引数 newhandler に指定したハンド ラーが コンポーネント間のデータ転送を仲介します このとき 転送したいデータを 規定するプロトコルは コンポーネントが提供するものに限定されます

1 テキスト領域に入力した文字列を選択して マウスボタンを押したまま 2 ラ ベルまでドラッグ&ドロップすると 3 選択した文字列がラベルに表示されます ツールチップを再設定するには メソッド addmouselistener を利用します 引数 l には インターフェース MouseListener を実現した 任意のリスナーオブジェクトを指定できます このと き リスナーには 次のメソッドを実現しておく必要があります 例題1c テキストをドラッグ&ドロップして ツールチップを再設定したい コンストラクター TransferHandler() の実引数を 次のように "text" から "tooltiptext" に変更すると ツールチップの文字列を再設定できます transferhandler=transferhandler("tooltiptext"), void mousepressed(mouseevent e) メソッド mousepressed は イベント MouseEvent が発生したときに呼び出され ます そして 発生したイベント e から 必要な情報を獲得できます JavaBeans に 準拠した Swing には Jython の便利な機能を適用できるので 次のように JLabel(mousePressed=mousePressed, キーワード引数 mousepressed= に イベントリスナーを指定するだけです 1 テキスト領域に入力した文字列を選択して マウスボタンを押したまま 2 ラ ベルまでドラッグ&ドロップすると 3 選択した文字列がツールチップに表示されま す イベントリスナーを登録する マウスボタンを押したときのイベントに応答するリスナーを設定するには 次のよう に public void addmouselistener(mouselistener l)

インターフェースの規定に従うことを明確にするには mousepressed= を固定する だけです 先の連載 1 JList<@.aspx> でも紹介したように Java の国境を越え て Jython の世界に入るときには addmouselistener/mouselistener など余分な 荷物は捨てて 身軽な旅を堪能できます すると 3つのラベルを配置したパネル iconview の状態を確認できます 支援ツール 配列の`中身`を確認する 先に紹介したツール<@.aspx>では 配列の状態を確認しようとすると 次のような インスペクター 左 Before が現われます 1 リスト項目から components を選択すると 2 <type 'array'> とあること から それが Java の配列型のインスタンスだと分かります この中には 先の例題を 構成する3つのラベル JLabel インスタンスが 要素として含まれるはずです 3 ボ タン 'inspect' を選択すると 新たなインスペクターが起動されます すると 例 題1 を構成するバネル iconview に配置された 各ラベルの状態を確認できます リスト項目にあるのは 配列型のインスタンスに関する情報です しかし インスペ クターに期待するのは 器 コンテナー ではなく中身 コンポーネント の情報で す つまり 配列そのものではなく 配列が保持する各要素の情報が欲しいのです こ の問題を解消する工夫をしたのが 改良したインスペクター 右 After です 配列 jarray の状態を確認する 先の 例題1a に次のコードの断片を挿入して 再実行してください from cz16inspector import Inspector Inspector(iconView).show() 新たに起動したインスペクターのリスト項目には 3つの数字 0 1 が並んでい ます これらは 配列の添字を表わします そこで 4 リスト項目 0 を選択すると 配列の先頭にあるラベルの状態を確認できます 実際に 5 テキスト領域には 次の ような情報が表示されます javax.swing.jlabel[, 0,0,138x48,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,max imumsize=,minimumsize=,preferredsize=,defaulticon=flags/ Japan.gif,disabledIcon=,horizontalAlignment=LEADING,horizontalText Position=TRAILING,iconTextGap=4,labelFor=,text=Japan,verticalAlign ment=center,verticaltextposition=center] すると 画像アイコン defaulticon=flags/japan.gif や テキスト text=japan

jarray jarray.zeros(0,'i') int list class InspectorPanel(JPanel): import jarray species = jarray.zeros(0, 'i'). class def init (self, target, selection=none): self.target = target if not selection: selection = SelectionPanel... No change... def actionperformed(self, e): e = self.listview.selectedvalue e = getattr(self.target, e) # oops (x.x) import jarray s = (SelectionPanel, SelectionPanel_array)[ isinstance(e, self.species)] Inspector(e, s).show() InspectorPanel SelectionPanel_array selection SelectionPanel def init (self, client, target): self.client = client self.target = target self.layout = BorderLayout() e = self.listview = JList( listdata=range(len(self.target)), valuechanged=self.valuechanged, preferredsize=(50, 100), ) self.add(jscrollpane(e), BorderLayout.CENTER) def valuechanged(self, e): s = self.selectedvalue = e.source.selectedvalue s = self.target[s] self.client.valueupdate(s) SelectionPanel_array self.target[s] 'inspect' TypeError TypeError: getattr(): 2nd arg can't be coerced to String getattr TypeError JFrame class SelectionPanel_array(JPanel):