Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java GUI 设计  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。
michaelyung





发贴: 13
积分: 0
于 2004-10-09 11:48 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
在一个panel上添加label,给label添加链接。
鼠标移到上面时显示为蓝色,否则就显示为黑色。
现在基本通过。点击也可以打开网页。
但有个小bug,发现鼠标上下through字符时,颜色变化很好。
左右through时,发现就不行了。
谁能帮我看看,我实在不知道哪个地方导致的问题。
谢谢各位!!


import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;
import java.text.*;

public class MouseMove{
public static void main(String[] args){
MouseFrame frame = new MouseFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

/*
* JFrame
* @author yung
*/
class MouseFrame extends JFrame{
public MouseFrame(){
setTitle("MouseTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

MousePanel panel = new MousePanel();
Container contentPane = getContentPane();
contentPane.add(panel);
}

public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}

/*
* JPanel
* @author yung
*/
class MousePanel extends JPanel{
public MousePanel(){
label = new HLabel(message,url);
label.setFont(new Font("Simsun",20,20));
add(label,BorderLayout.CENTER);
}

private HLabel label;
private String message="Hello Bupt";
private String url="http://www.bupt.edu.cn";
}

/*
* HLabel
* @author yung
*/
class HLabel extends JLabel{
private String url; //链接网址
private Rectangle bounds; //字符区域
boolean flag = true; //判断鼠标在字符区域内的标志

/*
* constructor
*/
public HLabel(String text,String uurl){
super(text);
url=uurl;
setHorizontalAlignment(SwingConstants.CENTER);
bounds=new Rectangle();
}

//当点击链接时打开网页
public void openIt() {
try {
Runtime.getRuntime().exec("mozilla "+url);
}catch (Exception e) {
JOptionPane.showMessageDialog(this,e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
}
}


//当鼠标移到链接上字体变为蓝色,然后重绘,鼠标变为手形
public void blue(){
flag = false;
repaint();
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}

//鼠标在其他地方,鼠标为默认。
public void black(){
flag = true;
repaint();
setCursor(Cursor.getDefaultCursor());
}



//paint
public void paint(Graphics g) {
super.paintBorder(g);//括号里是g,不知怎么显示不出来

Graphics2D g2=(Graphics2D)g;

//获取label上字符属性
Font f=getFont();
AttributedString ats=new AttributedString(this.getText());
ats.addAttribute(TextAttribute.FONT, f);
ats.addAttribute(TextAttribute.UNDERLINE,TextAttribute.UNDERLINE_ON);
AttributedCharacterIterator iter=ats.getIterator();
FontRenderContext frc=g2.getFontRenderContext();

TextLayout tl=new TextLayout(iter, frc);

//重绘时根据flag来判断是变为蓝色还是黑色
if(flag==true){
g2.setColor(Color.black);
}else{
g2.setColor(Color.BLUE);
}

//获取字符区域
Rectangle rect=tl.getBounds().getBounds();
Rectangle total=this.getBounds();
bounds.x=(total.width-rect.width)/2;
bounds.y=(total.height-rect.height)/2;
bounds.width=rect.width;
bounds.height=rect.height;
tl.draw(g2,bounds.x,bounds.y+rect.height);

//添加监听器
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
}


//查找鼠标所在点是否在字符的区域内
public Rectangle2D find(Point2D p){
if (bounds.contains(p)) return bounds; //括号里是p,也没显示出来
return null;
}

//鼠标点击的事件处理
private class MouseHandler extends MouseAdapter {
public void mouseClicked(MouseEvent event){
if(SwingUtilities.isLeftMouseButton(event)) {
if(event.getClickCount()==1) {
if(find(event.getPoint())!=null) {
openIt();
}
}
}
}
}

//鼠标移动的事件处理
private class MouseMotionHandler implements MouseMotionListener{
public void mouseMoved(MouseEvent event){
if (find(event.getPoint()) == null){
black(); //调用默认鼠标方法

}
else{
blue(); //调用显示链接为蓝色方法

}
}

public void mouseDragged(MouseEvent event){

}
}
}


why edited on 2004-10-09 12:56


关于女孩子从事软件开发的问题

话题树型展开
人气 标题 作者 字数 发贴时间
10538 请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 michaelyung 4297 2004-10-09 11:48
7755 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 michaelyung 30 2004-10-12 20:47
8086 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 kavinwang 270 2004-10-13 13:14
7693 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 michaelyung 148 2004-10-13 14:10
8028 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 kavinwang 15 2004-10-13 14:16
7813 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 michaelyung 214 2004-10-14 09:56
7408 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 kavinwang 128 2004-10-14 10:05
7545 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 michaelyung 79 2004-10-14 10:11
7494 Re:请问一个给label加超级链接的问题,有点小bug,谁能帮忙解决下。 kavinwang 12 2004-10-14 10:13

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923