1 package camidion.chordhelper.mididevice;
3 import java.awt.Component;
4 import java.awt.datatransfer.DataFlavor;
5 import java.awt.datatransfer.Transferable;
6 import java.awt.dnd.DnDConstants;
7 import java.awt.dnd.DragGestureEvent;
8 import java.awt.dnd.DragGestureListener;
9 import java.awt.dnd.DragSource;
11 import javax.swing.JTree;
12 import javax.swing.event.InternalFrameAdapter;
13 import javax.swing.event.InternalFrameEvent;
14 import javax.swing.event.InternalFrameListener;
15 import javax.swing.tree.DefaultTreeCellRenderer;
16 import javax.swing.tree.TreeModel;
21 public class MidiDeviceTreeView extends JTree
24 * {@link MidiDeviceFrame} を閉じたことを検知して再描画するためのリスナー
26 public final InternalFrameListener midiDeviceFrameListener = new InternalFrameAdapter() {
28 public void internalFrameClosing(InternalFrameEvent e) { repaint(); }
31 public static final DataFlavor TREE_MODEL_FLAVOR = new DataFlavor(TreeModel.class, "TreeModel");
33 private Transferable draggingObject = new Transferable() {
34 private DataFlavor flavors[] = {TREE_MODEL_FLAVOR};
36 public Object getTransferData(DataFlavor flavor) {
37 return getLastSelectedPathComponent();
40 public DataFlavor[] getTransferDataFlavors() { return flavors; }
42 public boolean isDataFlavorSupported(DataFlavor flavor) {
43 return flavor.equals(TREE_MODEL_FLAVOR);
47 * MIDIデバイスツリービューを構築します。
48 * @param model このビューにデータを提供するモデル
50 public MidiDeviceTreeView(MidiDeviceTreeModel model) {
52 (new DragSource()).createDefaultDragGestureRecognizer(
53 this, DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener() {
55 public void dragGestureRecognized(DragGestureEvent dge) {
56 if( (dge.getDragAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0 ) return;
57 dge.startDrag(DragSource.DefaultMoveDrop, draggingObject, null);
61 setCellRenderer(new DefaultTreeCellRenderer() {
63 public Component getTreeCellRendererComponent(JTree tree, Object value,
64 boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
66 super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
68 setIcon(MidiConnecterListView.MIDI_CONNECTER_ICON);
69 setDisabledIcon(MidiConnecterListView.MIDI_CONNECTER_ICON);
70 setEnabled( ! ((MidiConnecterListModel)value).getMidiDevice().isOpen() );