Drag'n Drop imm selben Frame unterbinden

Status
Nicht offen für weitere Antworten.

jabbah

Mitglied
Hallo zusammen,

mein Client hat mehrere Fenster, bei denen untereinander Daten mittels Drag'n Drop kopiert werden können. Leider ist es bei mir auch möglich, das mein Fenster sowohl DragSource als auch DropTarget ist. Dies möchte ich eigentlich gerne unterbinden.

Natürlich könnte man da mithilfe von DragSource/DropTarget arbeiten, aber da bekomme ich jeweils nur die Componenten raus, von denen das Drag gestartet bzw. der Drop geendet ist. Oder steh ich da auf dem Schlauch?

Die betreffenden Fenster sind alle vom Objekt ListerDialg, nur die angezeigten Daten unterscheiden sich.

Der ListerDialog ist wie folgt aufgebaut:

im oberen Teilen ist eine toolbar die folgende Objekte enthalten kann:
- 2 JCompobox
- 3 JTextField
- 1 JButton.
Die Toolbar kann entweder komplett ausgeblendet werden, oder nur einzelne Objekte

Der Rest des Frames ist ein JScrollPane mit einer JTable.

Wenn ich jetzt meine Drag in der JTable starte und dann aus irgendwelchen Gründen auch immer mein Drop schon in der ToolBar statt findet, sind DragSource und DropTarget unterschiedlich.
DragSource.getComponent= JTable
DropTarget.getComponent= (je nachdem wo der Drop statt findet) ein Objekt von der JToolbar.

Weiß einer von euch wo mein Fehler hier liegt?

Schonmal vielen Dank im vorraus.

Jasmin
 

Kim Stebel

Bekanntes Mitglied
du möchtest also überprüfen, ob DragSource und DropTarget im selben Frame sind?
dragSource.getComponent().getTopLevelAncestor ( ) == dropTarget.getComponent().getTopLevelAncestor ( )
 

jabbah

Mitglied
Kim Stebel hat gesagt.:
dragSource.getComponent().getTopLevelAncestor ( ) == dropTarget.getComponent().getTopLevelAncestor ( )

nur leider gibt es die Metode getTopLevelAncestor an dieser Stelle nicht. :-(

ich bin in der drop-.Methode vom DropTargetListener und als Agrument habe ich dann dementsprechend das DropTargetDropEvent.

und hier die ausgabe davon;

event.getDropTargetContext().getDropTarget() = java.awt.dnd.DropTarget@1fddb33
event.getSource() = java.awt.dnd.DropTarget@1fddb33

Diese Ausgabe bekomme ich, wenn ich innerhalb des Dialoges ein Drag'n Drop mache, aber auch wenn der Drop in einem anderen Dialog liegt, der aber das selbe FrameObject benutzt.

meinen Code mal in einigen wenigen vereinfachten schritten zusammen gefasst:

Code:
public class ListerDialog extends JFrame {

    protected JToolBar                        toolBar;
    private   JComboBox                     comboBox1;                       
    private   JTextField                         textfeld1;
    private   JComboBox                     comboBox2;
    private   JTextField                         textfeld2;
    private   JButton                           button1;
    private   JButton                           button2;
    private   JTextField                         textfeld3;
    private   JScrollPane                      scrollPane;

    //...

    public ListerDialog( Daten){
       initFrame();
       //...
    }
    

    private void initFrame() {
    //...

    toolBar = new JToolBar();
    frame.getContentPane().add( toolBar, java.awt.BorderLayout.NORTH );

       comboBox1 = new JComboBox(  );
        comboBox1.setAlignmentX( 0.5f );
       comboBox1.setAlignmentY( 0.5f );
        toolBar.add( comboBox1 );
        
        
        button1 = new javax.swing.JButton();
        button1.setAlignmentX( 0.5f );
        button1.setAlignmentY( 0.5f );
        toolBar.add( button1 );
   
       //...

        scrollPane = new JScrollPane();
        scrollPane.addMouseListener( popupListener );
        frame.getContentPane().add( scrollPane, java.awt.BorderLayout.CENTER );

        // add Table to ScrollPane


        // initialisierung von DropTarget
   // Drop support
        dropTargetListener = new DropTargetListener() {

                public void dragEnter( DropTargetDragEvent event ) {
                    event.acceptDrag( DnDConstants.ACTION_COPY_OR_MOVE );
                }


                public void drop( final DropTargetDropEvent event ) {
                    
                    if ( event.isDataFlavorSupported( SecurityProfileSelection.securityProfileFlavor ) ) {
                        Transferable transferable = event.getTransferable();
                        event.acceptDrop( DnDConstants.ACTION_COPY_OR_MOVE );

                    
                        try {
                            // mach was

                        } catch ( UnsupportedFlavorException e ) {
                            logger.logError( e.getMessage(), e );

                        } catch ( java.io.IOException e ) {
                            logger.logError( e.getMessage(), e );
                        }

                        event.dropComplete( true );
                    } else {
                        event.rejectDrop();
                    }                        
                }

                // yet not used:
                public void dragExit( DropTargetEvent event ) {};
                public void dragOver( DropTargetDragEvent event ) {};
                public void dropActionChanged( DropTargetDragEvent event ) {};
            };

        dropTarget = new DropTarget( frame,
                                     DnDConstants.ACTION_COPY_OR_MOVE,
                                     dropTargetListener );


     // Drag support
        if ( ! conservativeSelectionMode ) {
            dragSourceListener = new DragSourceListener() {
                    public void dragDropEnd( DragSourceDropEvent event ) {}
                    public void dragEnter( DragSourceDragEvent event ) {}
                    public void dragExit( DragSourceEvent event ) {}
                    public void dragOver( DragSourceDragEvent event ) {}
                    public void dropActionChanged( DragSourceDragEvent event ) {}                
                };
    
    
            dragGestureListener = new DragGestureListener() {
                    public void dragGestureRecognized( DragGestureEvent event ) {
    
                        SecurityProfile securityProfile = createSecurityProfileFromSelection();
                        if ( null == securityProfile ) {
                            return;
                        }
                        
                        logger.logDebug( "dragging: " + securityProfile );
                        event.startDrag( DragSource.DefaultCopyDrop,
                                         new SecurityProfileSelection( securityProfile ),
                                         dragSourceListener );
                    }
                };
    
            dragSource = new DragSource();
    
            dragRecognizer = dragSource.createDefaultDragGestureRecognizer(
                table, 
                DnDConstants.ACTION_COPY_OR_MOVE,
                dragGestureListener );
        }
   }

   public class MainClass{
   public static void main( String [] args) {
   
   ListerDialog dialog_A = new ListerDialog( datenSatzA);
   dialog_A.show();

   ListerDialog dialog_B = new ListerDialog( datenSatzB);
   dialog_B.show();
 
}
}
}

Nun soll es so möglich sein, das ich von dialog_A nach dialog_B ein Drag'n Drop machen kann. Aber innerhalb der Dialoge aber nicht.
Was ich nun festgestellt habe ist, dass wenn ich innerhalb des dialog_A mein Drag in der Tabelle starte ist innerhalb der Tabelle kein Drop möglich. Aber der Drop kann immernoch auf der ToolBar geschehen. Dies würde ich gerne auch unterbinden.

Da ich das ja in dem DropEvent überprüfen muss, ob ich Aktion ausführe oder nicht, muss ich dafür ja logischerweise Source und Target vergleichen. Aber offensichtlich bekommt man vom DropTargetDropEvent immer nur an das DropTarget.
 

Kim Stebel

Bekanntes Mitglied
DropTarget hat eine Methode getComponent(), bei der es sich sicherlich um eine JComponent handeln wird...probier's mal aus.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
AmsananKING ListView Drag And Drop AWT, Swing, JavaFX & SWT 0
AmsananKING Drag And Drop Filenames Inside A Listview AWT, Swing, JavaFX & SWT 1
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
M Polygon per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 26
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Drag and Drop von eigenen Objekten AWT, Swing, JavaFX & SWT 3
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
F Drag und Drop AWT, Swing, JavaFX & SWT 0
L JavaFX JavaFX Chart Drag and Drop AWT, Swing, JavaFX & SWT 3
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
U Drag and Drop mit imageview AWT, Swing, JavaFX & SWT 0
U Drag and Drop imageviews AWT, Swing, JavaFX & SWT 8
D SteelSeries in Netbeans als Drag-and-Drop einbinden AWT, Swing, JavaFX & SWT 0
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
A Drag and Drop mit JAVAFX- Scenebuilder AWT, Swing, JavaFX & SWT 1
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
R Drag and Drop Problem auf Jpanel AWT, Swing, JavaFX & SWT 2
N Swing JTable und Drag und Drop AWT, Swing, JavaFX & SWT 2
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
C Drag and Drop (inventar) AWT, Swing, JavaFX & SWT 15
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
HaukeG Swing Drag & Drop in verschiedenen Varianten AWT, Swing, JavaFX & SWT 4
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
C Swing Simulation von Drag and Drop Events AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
R Drag 'n Drop AWT, Swing, JavaFX & SWT 3
S Selektion bei Drag&Drop AWT, Swing, JavaFX & SWT 4
C Swing Drag and Drop mit Objekten in einem Fenster. AWT, Swing, JavaFX & SWT 9
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
B Drag and Drop AWT, Swing, JavaFX & SWT 6
K Drag and Drop Workbench AWT, Swing, JavaFX & SWT 2
P SWT Eclipse Draw2D Drag and Drop (ruckelt) AWT, Swing, JavaFX & SWT 4
F SWT Drag and Drop im TreeViewer AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
A TransferHandler & Drag n' Drop AWT, Swing, JavaFX & SWT 2
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
D Drag & Drop - node.isRoot AWT, Swing, JavaFX & SWT 3
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
E Swing Beim Drag & Drop, Drag verbieten?! AWT, Swing, JavaFX & SWT 2
E JTree Autoscroll bei Drag and Drop AWT, Swing, JavaFX & SWT 4
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Drag and Drop JPanel auf JPanel nach drop erneut verschieben? AWT, Swing, JavaFX & SWT 3
M Swing JTable Drag'n'Drop von Dateien AWT, Swing, JavaFX & SWT 3
M Drag and Drop: Quellfenster AWT, Swing, JavaFX & SWT 2
M Buttons per Drag & Drop im GridBagLayout verschieben AWT, Swing, JavaFX & SWT 6
M Swing JList > Drag & Drop AWT, Swing, JavaFX & SWT 2
C Drag an Drop vom JTree zur JTable AWT, Swing, JavaFX & SWT 4
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
H Drag&Drop von JComponents AWT, Swing, JavaFX & SWT 6
G JTable drag and drop AWT, Swing, JavaFX & SWT 4
H Drag&Drop mit GWT AWT, Swing, JavaFX & SWT 8
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
R JLayeredPane - Drag&Drop - mouseDragged AWT, Swing, JavaFX & SWT 6
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
V SWT TreeViewer Drag'n'Drop LocalSelectionTransfer AWT, Swing, JavaFX & SWT 10
R Swing JLayeredPane - Drag&Drop Positionen vertauschen AWT, Swing, JavaFX & SWT 3
F Drag & Drop mit eigenen Komponenten AWT, Swing, JavaFX & SWT 2
B SWT - Drag & Drop innerhalb einer Table AWT, Swing, JavaFX & SWT 3
S Drag'n'Drop AWT, Swing, JavaFX & SWT 8
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
M Drag & Drop in Swing (createTransferable) AWT, Swing, JavaFX & SWT 6
T Drag Quelle beim Drop AWT, Swing, JavaFX & SWT 6
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
E Drag & Drop von jTree in JList AWT, Swing, JavaFX & SWT 5
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
S Table Row per Drag and Drop in andere Table schieben? AWT, Swing, JavaFX & SWT 14
X wiedermal Drag n Drop AWT, Swing, JavaFX & SWT 2
P Drag & Drop AWT, Swing, JavaFX & SWT 2
X Drag and Drop AWT, Swing, JavaFX & SWT 2
F Drag&Drop Jlist -> JList AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben