Drag & drop issue

Status
Niet open voor verdere reacties.

javaCoder

Nieuwe gebruiker
Lid geworden
10 mei 2013
Berichten
1
Hallo allen,

Ik wil simpel programmaatje maken waarmee je door middel van drag & drop panels in een gridview kunt wijzigingen.

image1.png

De bedoeling is dat de onderste "blokken" (JPanels) gesleept kunnen worden naar de bovenste en dat dat in de bovenste de JPanel die nu in het grid zit vervangen wordt door het JPanel dat je sleept.

Dit krijg ik echter niet voor elkaar.

Mijn code: Bekijk bijlage dragendrop.zip.

PS: het is een eclipse bestand, maar in de map src staan alle .java bestanden om ze te lezen met een andere editor.

Degene die mij de goede richting op stuurt is erg bedankt! (en als je het project even erop aanpast zal ik voor eeuwig van je houden :love:)

Alvast bedankt,
JavaCoder
 
Je zult helaas voor eeuwig van me moeten gaan houden:

Bekijk bijlage Dragendropwerkend.zip

Ik gebruik in deze werkende versie geen JPanels maar JLabels met een Icon.
bij de klasse ColorIcon wordt er een icon gemaakt van de kleur.

code:

ColorIcon

[CPP]import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;

import javax.swing.Icon;

public class ColorIcon implements Icon
{// Instance variables
private int HEIGHT = 100;
private int WIDTH = 100;
private Color color = Color.white;

// Constructors
public ColorIcon(Color color)
{
this.color = color;
}
public ColorIcon(Color color, int width, int height)
{
setHeigt(height);
setWidth(width);
this.color = color;
}

// Getters and setters
public void setHeigt(int xheight){
this.HEIGHT = xheight;
}
public void setWidth(int xwidth){
this.WIDTH = xwidth;
}

public int getIconHeight()
{
return HEIGHT;
}

public int getIconWidth()
{
return WIDTH;
}

// make the icon appear (paintcomponent)
public void paintIcon(Component c, Graphics g, int x, int y)
{
g.setColor(color);
g.fillRect(x, y, WIDTH - 1, HEIGHT - 1);

g.setColor(Color.black);
g.drawRect(x, y, WIDTH - 1, HEIGHT - 1);
}
}[/CPP]


GridPanel


[CPP]import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JPanel;


@SuppressWarnings("serial")
public class Gridpanel extends JPanel {

public Gridpanel(){
this.setLayout(new GridLayout(2,2));
// Maak colourpanels voor in de grid en maak ze niet draggable door false toe te voegen.
this.add(new Colourpanel(Color.yellow, false));
this.add(new Colourpanel(Color.blue, false));
this.add(new Colourpanel(Color.red, false));
this.add(new Colourpanel(Color.green, false));

}
}
[/CPP]


Colourpanel

[CPP]import java.awt.Color;

import javax.swing.JLabel;
import javax.swing.TransferHandler;


@SuppressWarnings("serial")
public class Colourpanel extends JLabel {
/*
*Je hoeft in deze klasse niet altijd een boolean mee te geven.
*Om netheid in de rest van je code te behouden zou ik dat dus
*ook niet doen als ze draggable moeten zijn (of andersom als er meer niet draggable zijn)
**/


// Als je geen true of false meegeeft nadat je een color meegeeft pakt hij deze constructor
public Colourpanel(Color c){
this.addMouseListener(new DragMouseAdapter());
this.setIcon(new ColorIcon(c, 100,100));
setTransferHandler(new TransferHandler("icon"));
this.setOpaque(true);
}
// Als je wel true of false meegeeft pakt hij deze constructor
public Colourpanel(Color c, boolean draggable){
if (draggable){//je kunt gebruiken if (draggable == true)
this.addMouseListener(new DragMouseAdapter());
}
this.setIcon(new ColorIcon(c, 100,100));
setTransferHandler(new TransferHandler("icon"));
this.setOpaque(true);
}

}
[/CPP]


DragMouseAdapter

[CPP]
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.TransferHandler;

public class DragMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
JComponent c = (JComponent) e.getSource();
TransferHandler handler = c.getTransferHandler();
handler.exportAsDrag(c, e, TransferHandler.COPY);

}
}
[/CPP]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan