Hallo Leute
ich bastel gerade an ... siehe Titel ^^.
Die Panels werden auch auf DEM Panel angezeigt, aber erstens nicht dort, wo ich es erwartet hätte, zweitens funktioniert das mit dem hin und her schieben nicht.
Ich hatte es mir wie folgt gedacht. Das Panel wird links oben in der Ecke erzeugt. Dann kann ich es auf dem Panel verschieben, indem ich die Maustaste gedrückt halte (auf dem Panel natürlich).
Leider passiert folgendes: Das Panel wird links oben (zu weit links und zu weit oben) in der Ecke eingefügt. Wenn ich drauf klicke und die Maustaste gedrückt halte, sehe ich das Panel nur, wenn ich nach links oben, aus dem Panel rausgehe. Bewegen lässt es sich dementsprechend nicht.
Hilft es vlcht weiter, dass das große anzeige Panel nicht das einzige in meinem JFrame ist?
Ich hatte eine Vorlage von http://www.java2s.com/ wo ein ausgemaltes Rechteck verschoben wurde.
mfg
Nicholas
Hier ist dann meine Version:
import java.awt.*;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
/////////////
//Grundklasse von [URL]http://www.java2s.com/[/URL] nur angepasst von mir auf mein Problem
/////////////
class TablePanel extends JPanel implements MouseListener, MouseMotionListener {
Main_GUI myJFrame;
int[] preX, preY;
int iAkt;
boolean isFirstTime = true;
Rectangle area = new Rectangle(getWidth(), getHeight());
boolean pressOut = false;
public TablePanel(Main_GUI jf_Frame) {
super(null);
myJFrame = jf_Frame;
setBackground(Color.white);
addMouseMotionListener(this);
addMouseListener(this);
}
public void mousePressed(MouseEvent e) {
int i1 = this.getComponentCount();
preX = new int[i1];
preY = new int[i1];
for (int i2 = 0 ; i2 < i1 ; i2++) {
preX[i2] = getComponent(i2).getX()-e.getX();
preY[i2] = getComponent(i2).getY()-e.getY();
}
boolean b1 = false;
int i2 = 0;
while(!b1 && i2<i1) {
if (getComponent(i2).contains(e.getX(), e.getY())) {
iAkt = i2;
updateLocation(e);
b1=true;
}
else {
i2++;
}
}
if (!b1) {
pressOut=true;
}
}
public void mouseDragged(MouseEvent e) {
if (!pressOut) {
updateLocation(e);
}
}
public void mouseReleased(MouseEvent e) {
boolean b1 = false;
if (getComponent(iAkt).contains(e.getX(), e.getY())) {
updateLocation(e);
}
else {
pressOut = false;
}
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
/*
int i1 = this.getComponentCount();
preX = new int[i1];
preY = new int[i1];
for (int i2 = 0 ; i2 < i1 ; i2++) {
preX[i2] = getComponent(i2).getX()-e.getX();
preY[i2] = getComponent(i2).getY()-e.getY();
}
boolean b1 = false;
int i2 = 0;
while(!b1 && i2<i1) {
if (getComponent(i2).contains(e.getX(), e.getY())) {
b1=true;
}
else {
i2++;
}
}
boolean istEntity = true;
try {
EntityPanel pn1 = (EntityPanel) getComponent(i2);
} catch (Exception z) {istEntity = false;}
if (!b1) {
myJFrame.activateEditPanel(i2, istEntity);
} */
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void updateLocation(MouseEvent e) {
getComponent(iAkt).setLocation(preX[iAkt] + e.getX(), preY[iAkt] + e.getY());
if (checkRect()) {
//ShapeMover.label.setText(rect.getX() + ", " + rect.getY());
} else {
//ShapeMover.label.setText("drag inside the area.");
}
repaint();
}
boolean checkRect() {
if (area == null) {
return false;
}
if (area.contains(getComponent(iAkt).getX(), getComponent(iAkt).getY(), getComponent(iAkt).getWidth(), getComponent(iAkt).getHeight())) {
return true;
}
int new_x = getComponent(iAkt).getX();
int new_y = getComponent(iAkt).getY();
if ((getComponent(iAkt).getX() + getComponent(iAkt).getWidth()) > area.getWidth()) {
new_x = (int) area.getWidth() - getComponent(iAkt).getWidth();
}
if (getComponent(iAkt).getX() < 0) {
new_x = 0;
}
if ((getComponent(iAkt).getY() + getComponent(iAkt).getHeight()) > area.getHeight()) {
new_y = (int) area.getHeight() - getComponent(iAkt).getHeight();
}
if (getComponent(iAkt).getY() < 0) {
new_y = 0;
}
getComponent(iAkt).setLocation(new_x, new_y);
return false;
}
public void addEntity(EntityPanel epEntity) {
add(epEntity);
this.paintAll(this.getGraphics());
}
}
Alles anzeigen