Пожалуйста, извините, если это очень простое решение или глупая ошибка - я впервые пытаюсь реализовать графику в Java!:)
Я пытаюсь создать доску плиток, каждая из которых является объектом плитки, и все позиции плиток хранятся в тройном массиве плиток, называемых «содержимым» (content [] [] []).
Чтобы сделать каждую плитку «кликабельной», я в основном создаю метку с каждым значком плитки и размещаю эту плитку на доске на основе координат x, y объекта плитки.Я делаю это для каждого из ненулевых объектов Tile в массиве содержимого.
Это прекрасно работает, когда я использую функцию graphics.drawImage, но когда я размещаю каждую метку с помощью функции setBorders () it:
- Создает макет плиток, но не идеально - кажется, что некоторые отсутствуют или ниже других.
и
- Создает дубликатНерасположенный слой выше других плиток, которые находятся в своего рода правильном положении.
Код для функции, которую я вызываю:
public void paintComponent(Graphics graphics) {
// let superclass paint to fill in background
super.paintComponent(graphics);
Tile[][][] content = b.getContent();
if (content==null || tileImages==null) {
return;
}
/* Set dummy previous label */
prevT.setBounds(-1,-1,1,1);
// draw tiles back to front
for (int i = 0; i<content.length; i++) {
for (int y = 0; y<content[i].length; y++) {
for (int x = 0; x<content[i][y].length; x++) {
final Tile t = content[i][y][x];
if (t!=null) {
if (y>0 && content[i][y-1][x]!=null && t.equals(content[i][y-1][x])) {
continue;
}
if (x>0 && content[i][y][x-1]!=null && t.equals(content[i][y][x-1])) {
continue;
}
Image image = tileImages[t.getValue()][t.getSubindex()];
if (b.free(t)) {
image = tileImagesHL[t.getValue()][t.getSubindex()];
}
/* Mouse event magic */
graphics.drawImage(image, x*TILEW+TILEW/2+i*TILESKEW, (y+1)*TILEH/2-i*TILESKEW, null);
/* Create icon to be displayed */
ImageIcon icon = new ImageIcon(image);
/* Label that acts as the clickable tile */
final JLabel label = new JLabel();
/* Associate image with label */
label.setIcon(icon);
/* Allow mouse events to interact with label */
label.addMouseListener(this);
/* Position labels according to tile coordinates */
label.setBounds(x*TILEW+TILEW/2+i*TILESKEW, (y+1)*TILEH/2-i*TILESKEW, image.getWidth(null), image.getHeight(null));
/* Associate label with specified tile */
t.setLabel(label);
/* Add label to list*/
labels.add(label);
this.setVisible(true);
this.add(label);
}
}
}
}
}
Любое объяснение, почему этопроисходит будет очень ценится!Я пытался переписать эту функцию так много раз, и у меня нет идей!
Спасибо!:)