JLabel em cima do outro JLabel
Pergunta
É possível adicionar um JLabel em cima do outro JLabel? Obrigado.
Solução
A resposta curta é sim, como um JLabel
é um Container
, para que ele possa aceitar um Component
(a JLabel
é uma subclasse de Component
) para adicionar na JLabel
usando a add
método:
JLabel outsideLabel = new JLabel("Hello");
JLabel insideLabel = new JLabel("World");
outsideLabel.add(insideLabel);
No código acima, o insideLabel
é adicionado à outsideLabel
.
No entanto, visualmente, uma etiqueta com o texto "Hello" mostra-se, por isso, não se pode realmente ver a etiqueta que está contido dentro do rótulo.
Assim, a questão se resume o que realmente quer realizar, adicionando um rótulo em cima de outro rótulo.
Editar:
A partir dos comentários:
Bem, o que eu queria fazer era primeiro, ler uma certa fração de um arquivo, em seguida, exibir a fracção numa JLabel. o que eu pensei foi a dividir a fracção em 3 partes, em seguida usar uma etiqueta para cada um dos três. em seguida, em segundo lugar, eu quero ser capaz de arrastar a fração, então eu pensei que eu poderia usar outro JLabel e coloque o 3'mini jlabels' sobre o grande JLabel. eu não sei se isso vai funcionar embora ..: |
Parece que um deve olhar para como usar gerenciadores de layout de Java.
Um bom lugar para começar seria Usando gerenciadores de layout e a Visual Guia para layout Managers , tanto de O Java Tutoriais .
Parece uma GridLayout
poderia ser uma opção para realizar a tarefa.
JPanel p = new JPanel(new GridLayout(0, 1));
p.add(new JLabel("One"));
p.add(new JLabel("Two"));
p.add(new JLabel("Three"));
No exemplo acima, o JPanel
é feita para usar um GridLayout
como o gerenciador de layout, e é dito para fazer uma fileira de JLabel
s.
Outras dicas
A resposta à sua pergunta inicial é sim pelas razões que qualquer componente pode ser adicionado a um Container.
A razão que você não vê o segundo rótulo é porque, por padrão um JLabel usa um gerenciador de layout nulo eo tamanho da segunda etiqueta é (0, 0), de modo que não há nada para pintar. Então tudo que você precisa fazer é definir os limites da segunda etiqueta e você vai longe.
Você não pode usar um gerenciador de layout, se você quiser componentes de arrastar ao redor, porque assim que você redimensionar o quadro etc, o gerenciador de layout será invocado e os componentes serão reposicionados baseado no gerenciador de layout do componente.
é uma questão de layout. você pode fazer isso usando layout nulo (com locais codificados duros) ou com um layout personalizado.
Você pode usar um JLayeredPane
e configurá-lo de fronteira para Sem Fronteiras.
Você pode adicionar colocá-los acima uns dos outros usando a lacuna horizontal ou vertical (hgap, vgap) os atributos do
disposição
JPanel p = new JPanel(new GridLayout(2, 1,-40,0));
//the 40 is the hgap , make it the same with the label height .