返回首页


所以,你需要在你的Swing应用程序的简单的点击网址JLabel的吗?当然,你可以使用第三方库,做到这一点,但为什么添加另一个依赖一个单一的组件时,可以很容易地在5分钟内写一个。那么我们希望这个JLabel的:一下就可以了,去一个URL有鼠标上的手形光标就像一个真正的链接文本加以强调
,我们将写一个类,扩展JLabel和一个鼠标适配器,将采取开放链接的照顾。当鼠标适配器将只用于此标签,我们将添加一个私有成员类。这里是代码:

package insidecoding.swing



import java.awt.Color;

import java.awt.Cursor;

import java.awt.Desktop;

import java.awt.Graphics;

import java.awt.Insets;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.net.URI;

import javax.swing.JLabel;



/**

 *

 * @author ludovicianul

 */

public class URLLabel extends JLabel {



    private String url;



    public URLLabel() {

        this("","");

    }



    public URLLabel(String label, String url) {

        super(label);



        this.url = url;

        setForeground(Color.BLUE.darker());

        setCursor(

                new Cursor(Cursor.HAND_CURSOR));

        addMouseListener(

                new URLOpenAdapter());

    }



    public void setURL(String url) {

        this.url = url;

    }



    //this is used to underline the text

    @Override

    protected void paintComponent(Graphics g) {

        super.paintComponent(g);



        g.setColor(Color.blue);



        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);

    }



    private class URLOpenAdapter extends MouseAdapter {



        @Override

        public void mouseClicked(MouseEvent e) {

            if (Desktop.isDesktopSupported()) {

                try {

                    Desktop.getDesktop().browse(new URI(url));

                } catch (Throwable t) {

                    //

                }

            }

        }

    }

}

我认为代码是不言自明:在构造函数中,我们设置标签颜色较深的蓝色,我们设置了光标鼠标手形光标,我们注册的点击鼠标监听器我们使用的paint()方法,强调标签的文本。鼠标适配器使用打开浏览器的桌面类。此代码来处理这些异常,不开放的URL时;这取决于对方案的需求。
,我们可以添加额外的功能如变色,一旦链接被点击一次工作会议。要做到这一点,我们添加一个私有布尔变量,将持有的点击状态,改变涂料的方法来考虑这个标志,并标记为true时,标签被点击:{C}
此外,标签的颜色和点击的颜色变量。我们声明了2个新的成员变量:normalColor和clickedColor,我们宣布另一个构造函数,我们可以把它们作为参数:
private Color clickedColor = Color.black;

private Color normalColor  = Color.BLUE.darker();



public URLLabel(String label, String url, Color clickedColor, Color normalColor) {

        this(label, url);

        this.clickedColor = clickedColor;

        this.normalColor = normalColor;

}

如果您有任何问题,请在下面留下评论。

回答

评论会员: 时间:2
S