JLabel поверх другого JLabel - PullRequest
       28

JLabel поверх другого JLabel

6 голосов
/ 03 октября 2009

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

Ответы [ 5 ]

8 голосов
/ 03 октября 2009

Короткий ответ - да, поскольку JLabel является Container, поэтому он может принять Component (JLabel является подклассом Component) для добавления в JLabel с использованием метода add:

JLabel outsideLabel = new JLabel("Hello");
JLabel insideLabel = new JLabel("World");
outsideLabel.add(insideLabel);

В приведенном выше коде insideLabel добавляется к outsideLabel.

Однако визуально появляется метка с текстом «Hello», поэтому на самом деле нельзя увидеть метку, содержащуюся в метке.

Итак, вопрос сводится к тому, чего вы действительно хотите достичь, добавив ярлык поверх другого ярлыка.


Edit:

Из комментариев:

ну, то, что я хотел сделать, это сначала, читать определенную часть из файла, затем отобразить эту дробь в JLabel. что я думал о том, чтобы разделите дробь на 3 части, затем используйте ярлык для каждого из трех. затем, во-вторых, я хочу быть в состоянии перетащить фракция, поэтому я думал, что мог бы использовать еще один джабель и поместите 3'мини Джабелс над большим джабелем. Я не знаю, будет ли это работать, хотя ..: |

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

1 голос
/ 04 октября 2009

Ответ на исходный вопрос положительный по причинам, указанным для добавления любого компонента в контейнер.

Причина, по которой вы не видите вторую метку, заключается в том, что по умолчанию JLabel использует нулевой менеджер компоновки, а размер второй метки равен (0, 0), поэтому рисовать нечего. Так что все, что вам нужно сделать, это установить границы второго ярлыка и все готово.

Вы не можете использовать менеджер макета, если хотите перетаскивать компоненты, потому что, как только вы измените размер фрейма и т. Д., Менеджер макета будет вызван, и компоненты будут переставлены на основе менеджера макета компонента.

0 голосов
/ 19 декабря 2014

Вы можете добавить их друг над другом, используя горизонтальный или вертикальный пробел (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 .

0 голосов
/ 02 августа 2010

Вы можете использовать JLayeredPane и установить для его границы значение Нет границы.

0 голосов
/ 03 октября 2009

это вопрос макета. Вы можете сделать это, используя пустой макет (с жестко закодированными местоположениями) или с пользовательским макетом.

...