首页javajlabelJava Swing - 如何扩展JLabel以创建超链接标签

Java Swing - 如何扩展JLabel以创建超链接标签

我们想知道如何扩展JLabel以创建超链接标签。
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Main {
  public static void main(String[] args) throws Exception {
    JHyperlinkLabel label = new JHyperlinkLabel("w3cschool.cn");

    JOptionPane.showMessageDialog(null, label);

  }
}

class JHyperlinkLabel extends JLabel {
  private Color underlineColor = null;

  public JHyperlinkLabel(String label) {
    super(label);

    setForeground(Color.BLUE.darker());
    setCursor(new Cursor(Cursor.HAND_CURSOR));
    addMouseListener(new HyperlinkLabelMouseAdapter());
  }

  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.setColor(underlineColor == null ? getForeground() : underlineColor);

    Insets insets = getInsets();

    int left = insets.left;
    if (getIcon() != null)
      left += getIcon().getIconWidth() + getIconTextGap();

    g.drawLine(left, getHeight() - 1 - insets.bottom, (int) getPreferredSize()
        .getWidth() - insets.right, getHeight() - 1 - insets.bottom);
  }

  public class HyperlinkLabelMouseAdapter extends MouseAdapter {
    @Override
    public void mouseClicked(MouseEvent e) {
      System.out.println(getText());
    }
  }

  public Color getUnderlineColor() {
    return underlineColor;
  }

  public void setUnderlineColor(Color underlineColor) {
    this.underlineColor = underlineColor;
  }
}