drag&drop bild verschieben

Status
Nicht offen für weitere Antworten.
S

shanxp

Gast
hi an alle,

Ich möchte mehere Bilder mit hilfe von drag & drop funktion verschieben.
Also nicht da verscheiben wo die maus gerad ist sondern ich habe 4 X 4 rechtecke gezeichnet und
die bilder sind da drin angebracht. mit der maus möchte ich z.B von einem rechteck zu einem anderen bewegen
wie geht es?
ich habe zwar ein beispiel auf Sun seite gefunden.aber damit komme ich leider nicht klar.Das sind 4 dateien :(
Ich brauch nur einen Anstoß ,wie man z.B ein Bild verschiebt zu einem anderen Rechteck.

danke
 

André Uhres

Top Contributor
shanxp hat gesagt.:
..ich habe 4 X 4 rechtecke gezeichnet und
die bilder sind da drin angebracht. mit der maus möchte ich z.B von einem rechteck zu einem anderen bewegen
..
Du hast also 4 Zeilen mit je 4 Bildern und du willst diese 16 Bilder in eine andere Reihenfolge bringen,
indem du ein Bild nach dem anderen verschiebst. Hab ich das so richtig verstanden?
 
G

Guest

Gast
Ja genau . Es soll nicht nur freibewegbar sein sondern auch in das rechteck reinpassen.
ich meine wenn man ein bild mit der maus zieht zu einem rechteck dann soll das bild dahingezogen werden.

danke im voraus
 
S

shanxp

Gast
ups die obere Antwort ist von mir leider vergessen Namen einzutragen
 

André Uhres

Top Contributor
shanxp hat gesagt.:
..wenn man ein bild mit der maus zieht zu einem rechteck dann soll das bild dahingezogen werden...
Hier ist ein möglicher Lösungsansatz:

Ich nehme mal an die Bilder sind in Dateien gespeichert, z.B. als ".jpg"

Du könntest dann erstmal eine Liste der Bilder anlegen (Pfade zu den Bilddateien)
und eine Methode schreiben die die Bilder in der Reihenfolge anzeigt wie sie in der Liste stehen.

Die Bilder kannst du als kleinere JPanels in einem grossen JPanel (bilderContainer) anzeigen.
Dem bilderContainer fügst du dann einen MouseListener und einen MouseMotionListener hinzu.

Bei mousePressed machst du: bilderContainer.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR))
und speicherst die Referenz vom selectedBildPanel = (JPanel)((JPanel)evt.getSource()).getComponentAt(evt.getPoint());

Bei mouseDragged setzt du einfach einen boolean: moveMode = true;

Bei mouseReleased:
Code:
       if( moveMode ){
            move(evt);
        }
        bilderContainer.setCursor(Cursor.getDefaultCursor());
        moveMode = false;
In der move(..)-Methode guckst du an welchen Positionen die beiden BildPanels liegen (panelFrom, panelTo).
Das kannst du machen indem du die components vom bilderContainer einfach durchläufst:
Code:
       Component[] components = bilderContainer.getComponents();
        JPanel panelFrom = selectedBildPanel;
        JPanel panelTo = (JPanel)((JPanel)evt.getSource()).getComponentAt(evt.getPoint());
        int positionFrom=0;
        int positionTo=0;
        for( int i=0; i<components.length; i++ ){
            if( components[i] == panelFrom ){
                positionFrom=i;
            }
            if( components[i] == panelTo ){
                positionTo=i;
            }
        }
In deiner Liste verschiebst du dann das Bild von positionFrom nach positionTo
und brauchst dann nur noch die schon erwähnte Methode aufzurufen die die Bilder
in der Reihenfolge anzeigt wie sie in der Liste stehen.
 

André Uhres

Top Contributor
Wenn du willst, kannst du mit Toolkit#createCustomCursor(..) den Mauszeiger bei mouseDragged in ein
Abbild des zu verschiebenden JPanels verwandeln:
Code:
   private Cursor myPointer;
...
//In mousePressed:
        bilderContainer.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
        buildMyPointer(((JPanel)evt.getSource()).getComponentAt(evt.getPoint()));
...
//In mouseDragged:
        bilderContainer.setCursor(myPointer);
...
    private void buildMyPointer(Component component){
        BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setColor(component.getBackground());
        g.fillRect(0, 0,  image.getWidth(), image.getHeight());
        component.print(g);
        g.dispose();
        Toolkit tk = Toolkit.getDefaultToolkit();
        myPointer= tk.createCustomCursor(image, new Point(10,10), "myPointer");
    }
 
S

shanxp

Gast
hi danke !
eine Frage braucht man keinen TransferHandler ? :?:
weil ich habe im Quellcode von sun TranserHandler gefunden

hier ist ein Auszug

Code:
public void mouseDragged(MouseEvent e) {
        //Don't bother to drag if the component displays no image.
        if (image == null) return;

        if (firstMouseEvent != null) {
            e.consume();

            //If they are holding down the control key, COPY rather than MOVE
            int ctrlMask = InputEvent.CTRL_DOWN_MASK;
            int action = ((e.getModifiersEx() & ctrlMask) == ctrlMask) ?
                  TransferHandler.COPY : TransferHandler.MOVE;

            int dx = Math.abs(e.getX() - firstMouseEvent.getX());
            int dy = Math.abs(e.getY() - firstMouseEvent.getY());
            //Arbitrarily define a 5-pixel shift as the
            //official beginning of a drag.
            if (dx > 5 || dy > 5) {
                //This is a drag, not a click.
                JComponent c = (JComponent)e.getSource();
                TransferHandler handler = c.getTransferHandler();
                //Tell the transfer handler to initiate the drag.
                handler.exportAsDrag(c, firstMouseEvent, action);
                firstMouseEvent = null;
            }
        }
 
G

Guest

Gast
Hi
ich bin gerad am programmieren
wie kann man Bilder in JPanels einfügen ?
ich versuch mit folgendem Code aber ohne Erfolg
public void init()
{
setLayout(null) ;
bilderContainer = new JPanel() ;
bilderContainer.setLayout(new GridLayout(4,4)) ;
bild1 = new ImageIcon("images/bild_1.jpg") ;
lab_bild1 = new JLabel(bild1) ;
bilderContainer.add(this.lab_bild1) ;
add(bilderContainer) ;
}
 

André Uhres

Top Contributor
shanxp hat gesagt.:
..wie kann man Bilder in JPanels einfügen ?..
Code:
//package applets; 
/* 
* MovePicture.java 
*/ 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.*; 
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.URL; 
import java.util.*; 
import java.util.List; 
import javax.imageio.ImageIO; 
import javax.swing.*; 
public class MovePicture extends JApplet { 
    private JPanel selectedBildPanel; 
    private boolean moveMode; 
    private int count;
    public void init() { 
        System.out.println("BITTE WARTEN.."); 
        add(new BilderContainer()); 
        System.out.println("OK"); 
    } 
    class BilderContainer extends JPanel implements MouseListener, MouseMotionListener{ 
        private List<Bild> bilderListe; 
        private Cursor myPointer; 
        public BilderContainer(){ 
            addMouseListener(this); 
            addMouseMotionListener(this); 
            setLayout(new GridLayout(4, 4)); 
            bilderListe = new ArrayList<Bild>(); 
            for (int i = 0; i < 8; i++) { 
                bilderListe.add(new Bild("http://www.nzz.ch/images/wetter/radargross.jpg")); 
                bilderListe.add(new Bild("http://images.thetimes.co.uk/TGD/picture/0,,223788,00.jpg")); 
            } 
            bilderAnzeigen(); 
        } 
        public void mouseClicked(MouseEvent evt) {        } 
        public void mousePressed(MouseEvent evt) { 
            setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); 
            buildMyPointer(((JPanel)evt.getSource()).getComponentAt(evt.getPoint())); 
            selectedBildPanel = (JPanel) ((JPanel)evt.getSource()).getComponentAt(evt.getPoint()); 
        } 
        public void mouseReleased(MouseEvent evt) { 
            if( moveMode ) move(evt); 
            setCursor(Cursor.getDefaultCursor()); 
            moveMode = false; 
        } 
        public void mouseEntered(MouseEvent evt) {        } 
        public void mouseExited(MouseEvent evt) {        } 
        public void mouseDragged(MouseEvent evt) { 
            setCursor(myPointer); 
            moveMode = true; 
        } 
        public void mouseMoved(MouseEvent evt) {        } 
        private void move(MouseEvent evt){ 
            Component[] components = getComponents(); 
            JPanel panelFrom = selectedBildPanel; 
            JPanel panelTo = (JPanel)((JPanel)evt.getSource()).getComponentAt(evt.getPoint()); 
            int positionFrom=0; 
            int positionTo=0; 
            for( int i=0; i<components.length; i++ ){ 
                if( components[i] == panelFrom ) positionFrom=i; 
                if( components[i] == panelTo )   positionTo=i; 
            } 
            Bild bild = bilderListe.get(positionFrom); 
            bilderListe.remove(positionFrom); 
            bilderListe.add(positionTo, bild); 
            bilderAnzeigen(); 
        } 
        private void bilderAnzeigen(){ 
            removeAll(); 
            for (Bild bild : bilderListe) add(bild); 
            validate(); 
        } 
        private void buildMyPointer(Component component){ 
            BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB); 
            Graphics g = image.getGraphics(); 
            g.setColor(component.getBackground()); 
            g.fillRect(0, 0,  image.getWidth(), image.getHeight()); 
            component.print(g); 
            g.dispose(); 
            Toolkit tk = Toolkit.getDefaultToolkit(); 
            myPointer= tk.createCustomCursor(image, new Point(10,10), "myPointer"); 
        } 
    } 
    class Bild extends JPanel{ 
        public Bild(String pfad){ 
            System.out.println(++count);
            try{ 
                URL url = new URL(pfad); 
                image = ImageIO.read(url); 
            }catch(Exception ex){ 
                ex.printStackTrace(); 
            } 
        } 
        public void paintComponent(final Graphics g) { 
            super.paintComponent(g); 
            g.drawImage(image,0,0,null); 
        } 
        private BufferedImage image; 
    } 
}
 

André Uhres

Top Contributor
shanxp hat gesagt.:
..for (Bild bild : bilderListe) add(bild);
was bedeutet diese schleife noch nie gesehn..
Seit Java 1.5 gibt's den "foreach loop".
Der richtige Gebrauch hängt aber von der Benutzung der sogenannten generics ab.

So kann man eine Liste bauen und durchlaufen:

Code:
List<String> names = new ArrayList<String>();
names.add("a");
names.add("b");
names.add("c");

for (String name: names)
   System.out.println(name.charAt(0));

Du bindest die ArrayList an eine Klasse, hier die String-Klasse.
Du bindest auch die List Referenz an die String Klasse.
Dadurch beschränkst du dich darauf nur String Objekte zu der Liste hinzuzufügen.
Wenn du ein Date Objekt zu der names collection hinzufügen willst, wird der Compiler es nicht zulassen.
Wenn du Objekte ausliest brauchst du nicht zu casten.
Du kannst die Liste durchlaufen mit dem foreach loop:

Code:
for (String name: names)

Das liest sich so: "für jeden String name in names".
Bei jedem Schleifendurchgang, gibt Java das nächste Objekt der Liste an die lokale Referenzvariable "name".
Diese Referenzvariable musst du als String deklarieren - dem Typ an den du die names collection gebunden hast
und brauchst dann nicht mehr zu casten.
 
S

shanxp

Gast
vielen dank gut zu wissen
bedanke mich herzlich für ihre Antworten :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Drag and drop - Bild ohne ziehen am Mauszeiger anhängen? AWT, Swing, JavaFX & SWT 8
A JavaFX JavaFX images per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 1
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
J Drag'n Drop imm selben Frame unterbinden AWT, Swing, JavaFX & SWT 3
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

Ähnliche Java Themen


Oben