JLabel поверх другого JLabel
Вопрос
Можно ли добавить JLabel поверх другого JLabel?Спасибо.
Решение
Короткий ответ - да, в качестве JLabel
является Container
, так что он может принимать Component
(а JLabel
является подклассом Component
) , чтобы добавить в JLabel
используя add
способ:
JLabel outsideLabel = new JLabel("Hello");
JLabel insideLabel = new JLabel("World");
outsideLabel.add(insideLabel);
В приведенном выше коде insideLabel
добавляется к outsideLabel
.
Однако визуально отображается ярлык с текстом "Hello", поэтому на самом деле невозможно увидеть ярлык, который содержится внутри ярлыка.
Итак, вопрос сводится к тому, чего на самом деле хотят достичь, добавляя ярлык поверх другого ярлыка.
Редактировать:
Из комментариев:
ну, что я хотел сделать, так это сначала прочитать определенную дробь из файла, затем отобразить эту дробь в виде jlabel.я подумал о том, чтобы разделить дробь на 3 части, затем использовать метку для каждой из трех.затем, во-вторых, я хочу иметь возможность перетаскивать дробь, поэтому я подумал, что мог бы использовать другую jlabel и поместить 3 'mini jlabels' поверх большой jlabel.я не хотя знаю, сработает ли это ..:|
Похоже, что следует изучить, как использовать менеджеры компоновки в Java.
Хорошим местом для начала было бы Использование менеджеров Компоновки и Наглядное руководство для менеджеров по верстке, оба из Учебные пособия по Java.
Это звучит как GridLayout
это мог бы быть один из вариантов выполнения задачи.
JPanel p = new JPanel(new GridLayout(0, 1));
p.add(new JLabel("One"));
p.add(new JLabel("Two"));
p.add(new JLabel("Three"));
В приведенном выше примере JPanel
создан для использования GridLayout
как менеджер по верстке, и ему велят составить ряд из JLabel
s.
Другие советы
Ответ на ваш первоначальный вопрос - да по тем причинам, что в Контейнер можно добавить любой Компонент.
Причина, по которой вы не видите вторую метку, заключается в том, что по умолчанию JLabel использует null layout manager, а размер второй метки равен (0, 0), поэтому рисовать нечего.Итак, все, что вам нужно сделать, это установить границы второй метки и вперед.
Вы не можете использовать менеджер компоновки, если хотите перетаскивать компоненты, потому что, как только вы измените размер рамки и т.д., будет вызван менеджер компоновки, и компоненты будут перемещены на основе менеджера компоновки компонента.
это вопрос планировки.вы можете сделать это, используя нулевой макет (с жестко закодированными местоположениями) или с помощью пользовательского макета.
вы можете использовать JLayeredPane
и установите для его границы значение "Без границы".
вы можете добавить, расположив их друг над другом, используя горизонтальный или вертикальный разрыв (hgap, vgap) атрибутов макета
JPanel p = new JPanel(new GridLayout(2, 1,-40,0));
//the 40 is the hgap , make it the same with the label height .