Hallo,
ich bin gerade dabei Dame zu programmieren. Leider hänge ich gerade an einem Problem mit der GUI. Ich möchte die Figuren gerne per Drag and Drop verschieben lassen. Das Spielfeld habe ich mit 8 x 8 JPanels ausgestattet. Leider sind meine Figuren nicht mehr sichtbar, wenn ich sie in ein anderes JPanel bewegen möchte. Was muss ich noch beachten, damit die Figuren immer sichtbar bleiben beim bewegen über andere JPanels?
Hier sind meine 3 Klassen:
ich bin gerade dabei Dame zu programmieren. Leider hänge ich gerade an einem Problem mit der GUI. Ich möchte die Figuren gerne per Drag and Drop verschieben lassen. Das Spielfeld habe ich mit 8 x 8 JPanels ausgestattet. Leider sind meine Figuren nicht mehr sichtbar, wenn ich sie in ein anderes JPanel bewegen möchte. Was muss ich noch beachten, damit die Figuren immer sichtbar bleiben beim bewegen über andere JPanels?
Hier sind meine 3 Klassen:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.OverlayLayout;
public class CheckerFrame extends JFrame {
private final static long serialVersionUID = 90L;
private JPanel area;
private CheckerField[][] fields;
public CheckerFrame() {
// Frame
super("Dame");
setSize(700, 700);
setLocationRelativeTo(getParent());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Panel area
area = new JPanel();
area.setLayout(new GridLayout(8, 8));
// fields
fields = new CheckerField[8][8];
// create and add fields
for (int i = 0; i < fields.length; i++) {
for (int y = 0; y < fields[i].length; y++) {
fields[i][y] = new CheckerField();
area.add(fields[i][y]);
}
}
// add tokens first
Color first = new Color(0, 191, 255);
fields[0][1].add(BorderLayout.CENTER, new Token(first));
fields[0][3].add(BorderLayout.CENTER, new Token(first));
fields[0][5].add(BorderLayout.CENTER, new Token(first));
fields[0][7].add(BorderLayout.CENTER, new Token(first));
fields[1][0].add(BorderLayout.CENTER, new Token(first));
fields[1][2].add(BorderLayout.CENTER, new Token(first));
fields[1][4].add(BorderLayout.CENTER, new Token(first));
fields[1][6].add(BorderLayout.CENTER, new Token(first));
fields[2][1].add(BorderLayout.CENTER, new Token(first));
fields[2][3].add(BorderLayout.CENTER, new Token(first));
fields[2][5].add(BorderLayout.CENTER, new Token(first));
fields[2][7].add(BorderLayout.CENTER, new Token(first));
// add toekns second
Color second = new Color(221, 160, 221);
fields[5][0].add(BorderLayout.CENTER, new Token(second));
fields[5][2].add(BorderLayout.CENTER, new Token(second));
fields[5][4].add(BorderLayout.CENTER, new Token(second));
fields[5][6].add(BorderLayout.CENTER, new Token(second));
fields[6][1].add(BorderLayout.CENTER, new Token(second));
fields[6][3].add(BorderLayout.CENTER, new Token(second));
fields[6][5].add(BorderLayout.CENTER, new Token(second));
fields[6][7].add(BorderLayout.CENTER, new Token(second));
fields[7][0].add(BorderLayout.CENTER, new Token(second));
fields[7][2].add(BorderLayout.CENTER, new Token(second));
fields[7][4].add(BorderLayout.CENTER, new Token(second));
fields[7][6].add(BorderLayout.CENTER, new Token(second));
// add Frame
getContentPane().add(BorderLayout.CENTER, area);
setVisible(true);
}
public static void main(String[] args){
CheckerFrame checker = new CheckerFrame();
}
}
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
public class CheckerField extends JPanel {
private final static long serialVersionUID = 12L;
private static int xCounter = 0;
private static int yCounter = 0;
private static int counter = 0;
private int x;
private int y;
public CheckerField() {
setLayout(new BorderLayout());
if (counter % 2 == 0) {
setBackground(new Color(222, 184, 135));
} else {
setBackground(new Color(105, 105, 105));
}
x = xCounter;
y = yCounter;
if (xCounter == 7) {
yCounter++;
xCounter = 0;
counter++;
} else {
xCounter++;
}
// to set Color
counter++;
// Listener
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println(y + "," + x);
}
});
}
}
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JPanel;
public class Token extends JPanel {
private final static long serialVersionUID = 9L;
private Color color;
private int size;
private int x;
private int y;
private int count = 0;
public Token(Color color) {
this.color = color;
setOpaque(false);
// Listener
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
x = e.getX() - (size / 2);
y = e.getY() - (size / 2);
repaint();
}
});
// Circle
size = 60;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (count < 1) {
x = (getParent().getWidth() / 2) - (size / 2);
y = (getParent().getHeight() / 2) - (size / 2);
}
g.setColor(color);
g.drawOval(x, y, size, size);
g.fillOval(x, y, size, size);
count++;
}
}