Link em um jLabel

5 respostas
netbeansstringjavascriptjava
C

seria praticamente assim

jlabelNome(“Link1”+(http:\www.google.com)+" | Link2"+(http:\www.youtube.com)+" | Link3"+(http:\www.naruto.com.br));

Resultado do jlabel= Link1 | Link2 | Link3

ou seja queria vario link’s destintos em um único jlabel… é possível?

5 Respostas

S

Você pode usar HTML no texto do JLabel.

meuJLabel.setText("<html><a href=\"http:\\www.google.com\">Link 1</a></html>");
C

show de bola… era isso que estava procurando… agora pra futuramente caso eu queira colocar uma ação em java ex:
meulabel.setText(jbutao1.setEnable(true)+“Abilite botão1”+jbutao2.setEnable(true)+“Abilite botao2”…);
como eu faria isso?

S

Eu criaria um componente próprio pra isso, um JPanel contendo vários JLabel, aí você trata o clique no JLabel

C

queria apenas 1 label para que conseguisse habilitar vários se necessário …
label1.setText( “label 1 ativa”+jbotao_habilitado+"\n label 2 ativa"+jbotao2_habilitado);

S

Com um só tu não consegue esse comportamento.
Por isso a dica de criar seu próprio componente que faça isso, veja o exemplo abaixo:

Uma classe para o evento que o componente vai disparar ao ser clicado:

public class LinkLabelEvent {

    public final LinkLabel source;
    public final String text;

    protected LinkLabelEvent(LinkLabel source, String text) {
        this.source = source;
        this.text = text;
    }
}

Uma interface para permitir tratar o evento:

public interface LinkLabelListener {

    public void onClicked(LinkLabelEvent event);
}

O componente em si, você pode adequar como achar melhor:

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
import java.util.List;

import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class LinkLabel extends JPanel {

    private final List<LinkLabelListener> listeners = new LinkedList<>();

    public LinkLabel(String text) {
        BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS);
        setLayout(layout);
        String[] parts = text.split("\n");
        int count = parts.length;
        for (int i = 0; i < count; i++) {
            JLabel label = new JLabel(parts[i]);
            add(label);
            label.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    JLabel source = (JLabel) e.getSource();
                    onClicked(source.getText());
                }
            });
        }
    }

    public void addLinkLabelListener(LinkLabelListener listener) {
        listeners.add(listener);
    }

    public void removeLinkLabelListener(LinkLabelListener listener) {
        listeners.remove(listener);
    }

    private void onClicked(String text) {
        for (LinkLabelListener listener : listeners) {
            listener.onClicked(new LinkLabelEvent(this, text));
        }
    }
}

E finalmente um exemplo de como utilizá-lo:

import java.awt.BorderLayout;

import javax.swing.JFrame;

public class Exemplo {

    public static void main(String[] args) {
        Exemplo programa = new Exemplo();
        programa.executar();
    }

    private void executar() {
        JFrame janela = new JFrame("Exemplo");
        janela.setSize(640, 480);
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // criando um objeto do componente personalidado
        LinkLabel meuComponente = new LinkLabel("Link 1\nLink 2\nLink 3");

        // adicionando um listener pra tratar o clique nele
        meuComponente.addLinkLabelListener(event -> clicouEm(event.text));

        // adicionando o componente na janela
        janela.add(meuComponente, BorderLayout.CENTER);
        janela.setVisible(true);
    }

    private void clicouEm(String text) {
        System.out.println(text);
    }
}
Criado 28 de outubro de 2018
Ultima resposta 29 de out. de 2018
Respostas 5
Participantes 2