Вопрос

Можно ли добавить JLabel поверх другого JLabel?Спасибо.

Это было полезно?

Решение

Короткий ответ - да, в качестве JLabel является Container, так что он может принимать ComponentJLabel является подклассом 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 как менеджер по верстке, и ему велят составить ряд из JLabels.

Другие советы

Ответ на ваш первоначальный вопрос - да по тем причинам, что в Контейнер можно добавить любой Компонент.

Причина, по которой вы не видите вторую метку, заключается в том, что по умолчанию 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top