No Such Blog or Diary

«Prev || 1 | 2 | 3 | 4 | 5 | 6 || Next»

Java の総称型の配列

要素の型Eを抽象化したデータ構造を Java で実装しようと思って E [] elements をフィールドに置きつつコンストラクタで elements = new E[8]; とかやったらコンパイラに怒られた.そういえば Generics のパラメータ E に対しての配列は作れなかったな……

ということで,elements = (E[]) new Object[8]; とかやって誤魔化す.JDK の ArrayList とかもこうやってるし,これが正しいのだろう.なにか色々なものを投げ捨てている気もするし警告でちゃうのだけど.

基本的には ArrayList 使っとけってことだろうけど,どうせなら配列生成の構文だけでも警告の出ない構文を用意してほしかった気がする.

primitive配列のequalityチェックは?

JUnitでprimitiveの配列の比較が良くわからないので:

assert(java.util.Arrays.equals(expected, actual));

そしてTopCoderでJava使う人が少ない…

Java の D&D の続き

http://java.sun.com/docs/books/tutorial/uiswing/dnd/intro.html

をざっと読んだが以下のようになるのだろうか?

TransferHandler とやらがD&Dやクリップボードへのコピー時のデータの受け渡しを受け持つ.データは,Transferable というインターフェースを継承したものに包まれる.具体的なデータ形式の変換はTransferable にデータ型を表す DataFlavor を指定し変換させる.

つーことで,ここらの3つを実装しつつ,ドラッグの開始を担当するリスナを作っておけばよいと.リスナは単に TransferHandler#exportAsDrag(JComponent c, InputEvent e, int action) を呼べばいいらしい.

Java の D&D

Swing コンポーネントにはデフォルトの D&D の動作が実装されている.が,JTree に関しては用意されている機能が少なすぎる… というより,JTreeのアイテムをドラッグ(コピー)することはできるけど,構造を変化させるドロップ(ペースト)動作が実装されていない.ついでに,そのコピーもサブツリーのコピーではなくノード一個のみな気がする.そのため,木の構造を変えるようなD&D操作は自前で実装しないとならんみたい.めんどくさ.

JTree で一部のノードだけ編集可能ってできるのだろうか?

JTree のメソッドでは全体を編集可能とするかどうかしか設定できない.CellEditor の isCellEditable をオーバロードして判定しようにもこのメソッドに渡させるオブジェクトが JTree とかいってて編集対象ノードがわからない.shouldSelectCell で true を返せば編集対象ノードが選択されるのだが,このタイミングが編集可能性の判定の前にないらしくうまくいかない.最終手段として編集終了時にオブジェクトを返す getCellEditorValue() でキャンセルしてるけど… さて正しいやり方はどうするのだろうか?

JTree ではまる

root を指定するコンストラクタで生成した後に root の子供を removeAllChildren() で消しても画面上には子供が描画されたままに残ってしまう.さてどうしたものか? 今回は木を丸ごと置き換えればいいので Model ごと切り替えて乗り切ったがいま一つ使い方がわからん.そういや前に使った時はどうしたっけ?

«Prev || 1 | 2 | 3 | 4 | 5 | 6 || Next»
Search
Feeds

Page Top