Я хотел бы знать, как поставить JLabel поверх другого JLabel в определенной позиции в классе, который расширяет JPanel на Java. Люди просили об этом, но решения, которые я нашел, не удовлетворяют меня. Я использую GridLayout, вот некоторые из моего кода:Ввод JLabel поверх JLabel в Java
//imports
public class Game extends JPanel implements MouseListener {
Icon background = new ImageIcon(getClass().getResource("/background.jpg"));
Icon foreground = new ImageIcon(getClass().getResource("/foreground.jpg"));
JLabel backgr = new JLabel(background);
JLabel foregr = new JLabel(foreground);
JFrame frame = new JFrame("Game");
public Game() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
backgr.addMouseListener(this);
frame.setLayout(new FlowLayout());
frame.setPreferredSize(new Dimension(200,200));
frame.pack();
frame.setVisible(true);
frame.addMouseListener(this);
backgr.setLayout(new BorderLayout());
frame.add(backgr);
backgr.add(foreground);
}
}
(у меня есть много других методов в этом классе, например, некоторые вещи мыши, но я не включать их здесь, так как они не имеют отношения к этой проблеме.)
В настоящее время код почти работает так, как я хочу, изображение переднего плана отображается поверх фона, прямо посередине его. Но я хотел бы, чтобы изображение переднего плана отображалось в определенных координатах на фоновом изображении. Я думал, что если бы я хотел отобразить передний план в координатах (50, 50), я мог бы сказать backgr.add (foreground, 50,50), это компилируется, но возвращает ошибку при запуске программы. Какие-нибудь советы о том, что делать? Было бы очень благодарно.
Edit: я обнаружил, что, говоря backgr.setLayout (нуль), backgr.add (foregr), а затем foregr.setLocation (50,50), мы можем сделать то, что я искал. Но так как не использовать диспетчер компоновки не рекомендуется, я ищу лучшие решения, так что я могу использовать координаты на значке backgr.
какая ошибка возвращается? – Prasad
@Prasad "Исключение в потоке" AWT-EventQueue-0 "java.lang.IllegalArgumentException: незаконная позиция компонента." Независимо от того, какие координаты я выбираю, я получаю это, я предполагаю, что это неправильный путь. – Sid
Прочитайте API, этот метод НЕ используется для указания координат X/Y. – camickr