JToolBarとコンポーネントのDrag'n'Drop

戻る



:::::::::::::: JToolBarTest.java :::::::::::::: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.util.*; /** * $Id: JToolBar.html,v 1.1 2009/06/22 16:11:48 kishi Exp kishi $ */ public class JToolBarTest extends JFrame { private DNDListener dndListener; private DragSource dragSource; private DropTarget dropTarget; private JButton imageButton; private JCheckBox checkBox; private JRadioButton radioButton; private JLabel label; private JComboBox comboBox; private JButton button; private JTextArea textArea; private JTextField textField; private JToolBar tool; private JPanel panel; public JToolBarTest() { super( "■JToolBarのテスト" ); setBounds( 128, 256, 480, 600 ); tool = new JToolBar( "MyBar" ); panel = new JPanel(); // ドラッグアンドドロップを実施するクラスのインスタンス化 dndListener = new DNDListener(); dndListener.setReference( this ); dragSource = new DragSource(); dropTarget = new DropTarget( panel, DnDConstants.ACTION_COPY, dndListener ); putComponents(); // ツールバーを上部に追加 this.getContentPane().add( tool , BorderLayout.NORTH ); // パネルを下部に追加 this.getContentPane().add( panel , BorderLayout.CENTER ); //------------------------------------------------------------ // //------------------------------------------------------------ setDefaultCloseOperation( EXIT_ON_CLOSE ); setVisible( true ); } public static void main( String[] args ) { JToolBarTest test = new JToolBarTest(); } public void putComponents() { tool.removeAll(); // イメージボタン imageButton = new JButton( new ImageIcon( "logo.gif" ) ); tool.add( imageButton ); // チェックボックス checkBox = new JCheckBox(); checkBox.setSelected( true ); checkBox.setEnabled( false ); tool.add( checkBox ); // ラジオボタン radioButton = new JRadioButton(); radioButton.setSelected( true ); radioButton.setEnabled( false ); tool.add( radioButton ); // ラベル tool.addSeparator(); label = new JLabel( "Label" ); tool.add( label ); // コンボボックス tool.addSeparator(); Object[] names = new Object[] {" "}; comboBox = new JComboBox( ); tool.add( comboBox ); // ボタン tool.addSeparator(); button = new JButton( "Button" ); tool.add( button ); // テキストエリア tool.addSeparator(); textArea = new JTextArea( "TextArea" ); textArea.setEnabled( false ); tool.add( textArea ); // テキストフィールド tool.addSeparator(); textField = new JTextField(); textField.setText( "TextField" ); textField.setEnabled( false ); tool.add( textField ); Component[] components = tool.getComponents(); for ( int i = 0;i < components.length;i++ ) { System.out.println( components[ i ] ); System.out.println( ); } this.validate(); this.repaint(); /** DragGestureRecognizer dragRecognizer1 = dragSource.createDefaultDragGestureRecognizer( imageButton, DnDConstants.ACTION_COPY, dndListener ); */ java.util.List list = new LinkedList(); list.add( imageButton ); list.add( checkBox ); list.add( radioButton ); list.add( label ); list.add( comboBox ); list.add( button ); list.add( textArea ); list.add( textField ); Iterator iterator = list.iterator(); while ( iterator.hasNext() ) { Component obj = ( Component ) iterator.next(); DragGestureRecognizer dragRecognizer = dragSource.createDefaultDragGestureRecognizer( obj, DnDConstants.ACTION_COPY, dndListener ); } } } :::::::::::::: DNDListener.java :::::::::::::: import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.awt.event.*; import java.io.*; /** $Id: JToolBar.html,v 1.1 2009/06/22 16:11:48 kishi Exp kishi $ */ public class DNDListener implements DragGestureListener, DragSourceListener, DropTargetListener, Transferable { static final DataFlavor[] supportedFlavors = { null }; private JToolBarTest test; private Object object; static { try { supportedFlavors[ 0 ] = new DataFlavor( DataFlavor.javaJVMLocalObjectMimeType ); } catch ( Exception ex ) { ex.printStackTrace(); } } public void setReference( JToolBarTest test ) { this.test = test; } // Transferable methods. public Object getTransferData( DataFlavor flavor ) { if ( flavor.isMimeTypeEqual( DataFlavor.javaJVMLocalObjectMimeType ) ) return object; else return null; } public DataFlavor[] getTransferDataFlavors() { return supportedFlavors; } public boolean isDataFlavorSupported( DataFlavor flavor ) { return flavor.isMimeTypeEqual( DataFlavor.javaJVMLocalObjectMimeType ); } // DragGestureListener method. public void dragGestureRecognized( DragGestureEvent ev ) { ev.startDrag( null, this, this ); } // DragSourceListener methods. public void dragDropEnd( DragSourceDropEvent ev ) { } public void dragEnter( DragSourceDragEvent ev ) { } public void dragExit( DragSourceEvent ev ) { } public void dragOver( DragSourceDragEvent ev ) { object = ev.getSource(); } public void dropActionChanged( DragSourceDragEvent ev ) { } // DropTargetListener methods. public void dragEnter( DropTargetDragEvent ev ) { } public void dragExit( DropTargetEvent ev ) { } public void dragOver( DropTargetDragEvent ev ) { dropTargetDrag( ev ); } public void dropActionChanged( DropTargetDragEvent ev ) { dropTargetDrag( ev ); } void dropTargetDrag( DropTargetDragEvent ev ) { ev.acceptDrag( ev.getDropAction() ); } public void drop( DropTargetDropEvent ev ) { ev.acceptDrop( ev.getDropAction() ); try { Object target = ev.getSource(); Object source = ev.getTransferable().getTransferData( supportedFlavors[ 0 ] ); Component component = ( ( DragSourceContext ) source ).getComponent(); Container oldContainer = component.getParent(); Container container = ( Container ) ( ( DropTarget ) target ).getComponent(); container.add( component ); test.putComponents(); oldContainer.validate(); oldContainer.repaint(); container.validate(); container.repaint(); } catch ( Exception ex ) { ex.printStackTrace(); } ev.dropComplete( true ); } public static void main( String[] arg ) { // ドラッグアンドドロップするコンポーネントの生成 Button button1 = new Button( "このボタンをドラッグしてください。" ); Button button2 = new Button( "このボタンをドラッグしてください。" ); Label label = new Label( "このラベルをドラッグしてください。" ); label.setBackground( Color.yellow ); Checkbox checkbox = new Checkbox( "このチェックボックスをドラッグしてください。" ); Frame frame = new Frame( "パネル間でのDrag'n'Dropのテスト" ); frame.setLayout( new GridLayout( 2, 1 ) ); // 上部のパネル Panel upperPanel = new Panel(); upperPanel.add( button1 ); upperPanel.add( label ); upperPanel.add( checkbox ); // 下部のパネル Panel lowerPanel = new Panel(); lowerPanel.setBackground( Color.cyan ); lowerPanel.add( button2 ); frame.add( upperPanel ); frame.add( lowerPanel ); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent we ) { System.exit( 0 ); } } ); DNDListener dndListener = new DNDListener(); DragSource dragSource = new DragSource(); DropTarget dropTarget1 = new DropTarget( upperPanel, DnDConstants.ACTION_MOVE, dndListener ); DropTarget dropTarget2 = new DropTarget( lowerPanel, DnDConstants.ACTION_MOVE, dndListener ); DragGestureRecognizer dragRecognizer1 = dragSource.createDefaultDragGestureRecognizer( button1, DnDConstants.ACTION_MOVE, dndListener ); DragGestureRecognizer dragRecognizer2 = dragSource.createDefaultDragGestureRecognizer( button2, DnDConstants.ACTION_MOVE, dndListener ); DragGestureRecognizer dragRecognizer3 = dragSource.createDefaultDragGestureRecognizer( label, DnDConstants.ACTION_MOVE, dndListener ); DragGestureRecognizer dragRecognizer4 = dragSource.createDefaultDragGestureRecognizer( checkbox, DnDConstants.ACTION_MOVE, dndListener ); frame.setBounds( 0, 200, 800, 400 ); frame.show(); } }

戻る inserted by FC2 system