Предположим, я создаю приложение для шахмат с качелями. Я использую массив JLabels для представления шахматной доски (каждый из них имеет соответствующий значок, расположенный как слегка/темный затененный блок). Я создал еще один массив JLabels, чтобы удерживать значки шахматных фигур, но я недостаточно знаком с качелями, чтобы знать, как их реализовать, чтобы отображать поверх шахматной доски. Кто-нибудь знает какие-либо методы?Как показать значок JLabel над другим значком JLabel
ответ
Я написал небольшой пример, который строит окно и два JLabels поверх друг друга.
Обратите внимание, что в grey.jpg и pawn.png изображения имеют размер 128х128 и пешки один имеет прозрачный фон (таким образом предотвратить фоне пешки изображения из укрытия серый прямоугольник окна).
Вот класс ChessFrame, который строит окно и добавляет компоненты:
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ChessFrame extends JFrame {
private JPanel panel;
private JLabel greyBox;
private JLabel pawn;
public ChessFrame() {
super();
/* configure the JFrame */
this.setSize(300, 300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void addComponents() {
panel = new JPanel();
greyBox = new JLabel(new ImageIcon("images/grey.jpg"));
pawn = new JLabel(new ImageIcon("images/pawn.png"));
/* add the pawn inside the grey box (we have to set a layout for the grey box JLabel) */
greyBox.setLayout(new BorderLayout());
greyBox.add(pawn);
/* add grey box to main JPanel and set its background to white so we observe the result better */
panel.add(greyBox);
panel.setBackground(Color.WHITE);
this.getContentPane().add(panel);
}
@Override
public void setVisible(boolean b) {
super.setVisible(b);
}
}
А вот Основной класс, который создает объект ChessFrame и показывает окно:
public class Main {
public static void main(String[] args) {
ChessFrame chessFrame = new ChessFrame();
chessFrame.addComponents();
chessFrame.setVisible(true);
}
}
1) Хотя можно добавлять компоненты к ярлыкам, это имеет недостаток в том, что ярлык больше не может предоставить соответствующий предпочтительный размер менеджеру компоновки. Лучшим подходом было бы установить цвет BG на метку, на которой отображается значок, или панель, в которую добавлена метка. 2) Один из способов получить изображение (-ы) для примера - это горячая ссылка на изображения, видимые в [этом Q & A] (http://stackoverflow.com/q/19209650/418556). –
Пошел с этой реализацией, потому что Брайан спросил о JLabels поверх JLabels :), поэтому я хотел пойти по тому же пути, что и вопрос. Кроме того, спасибо за предложение с помощью горячих ссылок на изображения. – Valy
* «Я хотел идти по тому же пути, что и вопрос». * См. [Является ли «Не делай этого» действительного ответа?] (Http://meta.stackexchange.com/questions/8891/is-dont -do-это-а-действительный-ответ). (Да, конечно, если ОП принимает неверный подход и есть лучшее решение.) Конкретные примеры можно увидеть в моем комментарии по этому вопросу (комментарий в ответ на сам вопрос), а также [мой ответ ] (http://stackoverflow.com/a/42312098/418556) в [Перемещение JPanels с использованием TimerTask] (http://stackoverflow.com/q/42310947/418556) - (принятый) ответ не перемещает панели и не использует ' TimerTask'. –
- 1. JLabel над другим JLabel не работает
- 2. Место Jlabel над другим
- 3. JLabel с другим JLabel
- 4. Добавление JLabel с прозрачным значком фона над другим JLabel и отображением обоих
- 5. Отображение JLabel перед другим JLabel
- 6. Как изменить значок JLabel?
- 7. Java: JLabel с текстом и значком
- 8. Пользовательский значок JLabel
- 9. Периодически меняйте значок JLabel
- 10. Показать JLabel частично поверх другого JLabel
- 11. Как поместить текст JLabel под значком
- 12. Добавление JLabel над GridLayout
- 13. Поместите JLabel над двумя JButtons
- 14. JLabel неприменим к другим классам
- 15. Показать BMP в JLabel
- 16. Показать массивы JLabel
- 17. Показать переменную на JLabel
- 18. Значок поворота Java в JLabel
- 19. Почему не появляется значок JLabel?
- 20. как поставить JLabel внутри JLabel или разделить JLabel на квадраты
- 21. Как показать изображение в JLabel?
- 22. JLabel поверх другого JLabel
- 23. чтение и набор JLabel значок Изображение, с другим расширением +0,001
- 24. Перетащите JLabel при сохранении оригинала JLabel
- 25. JLabel перевод
- 26. Как я могу обновить значок JLabel?
- 27. Как правильно выровнять значок в JLabel?
- 28. Как изменить значок в JLabel с JButton
- 29. Перетаскивание JLabel поверх другого JLabel
- 30. Показать математическую серию в JLabel
'JLabel' это еще один компонент, он способен содержать другие компоненты, но вам нужно будет установить его менеджер компоновки, возможно, используйте 'BorderLayout' – MadProgrammer
Как [пример] (http://stackoverflow.com/questions/33115320/having-a- JLabel-на-топ-другому-JLabel-что-есть-ан-изображения/33115415 # 33115 415) – MadProgrammer
См. Также [Создание надежного масштабируемого графического интерфейса Swing Chess GUI] (http://stackoverflow.com/q/21142686/418556) для начальной точки. –