Итак, я пытаюсь сделать настольную игру с графическим интерфейсом. Я создал JLabel с именем игрока и хочу использовать его как токен. Затем я сделал еще одну JLabel, содержащую изображение платы. Я добавил обе метки на панель boardPanel, и сейчас они расположены рядом. Как мне сделать так, чтобы вместо того, чтобы быть рядом, JLabel с именем находился на JLabel с img?
Есть ли что-то, что я должен рассмотреть для панели, содержащей две метки? Как определенный менеджер макетов?
[только части моего кода]
import java.awt.*;
import javax.swing.*;
public class BoardFrame extends JFrame {
private JPanel mainPanel, boardImgPanel,jPanelSouth,buttonPanel
,cardPanel,statsPanel;
private boardImgLabel;
Player player1;
public BoardFrame() {
//boardPanel and stuff in it
boardImgPanel = new JPanel();
boardImgLabel = new JLabel();
boardImgLabel.setIcon(new ImageIcon("BOARDPICTUREHERE"));
boardImgPanel.add(boardImgLabel);
/////////////////////ADDING PLAYERS/////////////////////
player1 = new Player("Steven", 1,1,1,1,1);
JLabel player1Label = new JLabel(player1.getPlayerName());
boardImgPanel.add(player1Label);
mainPanel = new JPanel(new GridLayout(0, 1));
add(mainPanel);
}
}
что-то вроде этого, но явно вместо кота это изображение доски, а текст - это имя игрока. а>
ИЗМЕНИТЬ
Я создал класс, который расширяет jpanel, а затем хотел добавить его в класс BoardFrame.
import java.awt.BorderLayout;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class BoardPanelNorth extends JPanel {
File imageFile = new File("....");
JLabel boardImgLabel = new JLabel();
Player player1;
public BoardPanelNorth() {
setLayout(new BorderLayout());
try {
boardImgLabel = new JLabel(new ImageIcon(ImageIO.read(imageFile)));
boardImgLabel.setLayout(new BorderLayout());
player1 = new Player("Steven", 1,1,1,1,1);
JLabel player1Label = new JLabel(player1.getPlayerName());
player1Label.setFont(player1Label.getFont().deriveFont(128f));
player1Label.setHorizontalAlignment(JLabel.RIGHT);
player1Label.setVerticalAlignment(JLabel.BOTTOM);
player1Label.setForeground(Color.WHITE);
add(boardImgLabel);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Класс рамы платы:
import java.awt.*;
import javax.swing.*;
public class BoardFrame extends JFrame {
private JPanel mainPanel, boardImgPanel;
private JSplitPane splitPane;
public BoardFrame() {
boardImgPanel = new BoardPanelNorth();
//split plane
splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
new JScrollPane(boardImgPanel), jPanelSouth);
splitPane.setDividerLocation(470); //top size
splitPane.enable(false); //cant adjust
mainPanel = new JPanel(new GridLayout(0, 1));
mainPanel.add(splitPane);
add(mainPanel);
}
}
Игрок Стивен по-прежнему не появляется на карте.