gibt es ein hyperlink textfield

floggie

Mitglied
Hi,

Ich würde gerne so etwas wie ein Hyperlink Textfield haben, dass wenn ich mit der Maus rüberfahre sich "kenntlich" macht als solches. Gibt es so etwas bzw. wie könnte man das realisieren?

Grüsse

floggie
 
Hallo Floggie,

Schaul mal hier:

Code:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.event.MouseInputAdapter;

public class LinkExample {

	JFrame frame = new JFrame();

	JTextField tf = new JTextField(" www.google.de ");

	Font f = new Font("Serif", Font.PLAIN, 20);

	Font g = new Font("Serif", Font.BOLD, 15);
	
	Color c = Color.BLUE;
	
	Color d = Color.RED;

	public void example() {

		MouseListener link = new MouseInputAdapter() {
			public void mouseClicked(MouseEvent e) {
				try {
					Runtime.getRuntime().exec(
							"rundll32 url.dll,FileProtocolHandler "
									+ "www.google.de");
				} catch (IOException e1) {
				}
			}

			public void mouseEntered(MouseEvent e) {
				tf.setFont(g);
				tf.setForeground(d);
			}

			public void mouseExited(MouseEvent e) {
				tf.setFont(f);
				tf.setForeground(c);
			}
		};
		
		tf.setFont(f);
		tf.addMouseListener(link);
		tf.setForeground(c);
		tf.setEditable(false);
		tf.setHorizontalAlignment(JTextField.CENTER);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLayout(new FlowLayout());
		frame.add(tf);
		frame.setSize(300,200);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		LinkExample le = new LinkExample();
		le.example();
	}

}

Vg Erdal
 
Alternativ geht auch (benutzt du wie ein ganz normales Label -> jFrame.getContentPane.add(...) usw.):
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.MouseEvent;

/**
 * <p>Überschrift: JLinkLabel</p>
 * <p>Beschreibung: Ein anklickbares Label</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Organisation: none</p>
 * @author Tobias Viehweger
 * @version 1.0
 */

public class JLinkLabel
	extends JLabel
	implements MouseListener {

  private LinkLabelListener listener;
  private String text;
  private boolean underline;

  /**
   * Leerer Konstruktor
   */
  public JLinkLabel() {
	setText("");
	addMouseListener(this);
	this.text = text;
	underlineOnMouseOver(false);
	setHandCursor(false);
  }

  /**
   *
   * Konstruktor
   *
   * @param text Beschriftung des Labels
   */
  public JLinkLabel(String text) {
	setText(text);
	addMouseListener(this);
	this.text = text;
	underlineOnMouseOver(true);
	setHandCursor(true);
  }

  /**
   *
   * Konstruktor
   *
   * @param text Beschriftung des Labels
   * @param underline true wenn bei &Uuml;berfahren mit der Maus das Label
   *				  unterstrichen werden soll
   *
   */
  public JLinkLabel(String text, boolean underline) {
	setText(text);
	addMouseListener(this);
	this.text = text;
	underlineOnMouseOver(underline);
	setHandCursor(true);
  }

  /**
   *
   * Konstruktor
   *
   * @param text Beschriftung des Labels
   * @param underline true, wenn bei &Uuml;berfahren mit der Maus das Label
   *				  unterstrichen werden soll
   *
   * @param handCursor true, wenn bei &Uuml;berfahren mit der Maus der Cursor
   *				   ge&auml;ndert werden soll
   */
  public JLinkLabel(String text, boolean underline, boolean handCursor) {
	setText(text);
	addMouseListener(this);
	this.text = text;
	underlineOnMouseOver(underline);
	setHandCursor(handCursor);
  }

  /**
   *
   * F&uuml;gt dem Label einen Listener hinzu, damit auf Ereignisse reagiert
   * werden kann
   *
   * @param linkLabelListener Ein LinkLabelListener
   */
  public void addLinkLabelListener(LinkLabelListener linkLabelListener) {
	listener = linkLabelListener;
  }

  public void mouseClicked(MouseEvent mouseEvent) {
	if (mouseEvent.getSource().equals(this) && listener != null) {
	  listener.clickedLabel(mouseEvent);
	}
  }

  public void mouseEntered(MouseEvent mouseEvent) {
	if (mouseEvent.getSource().equals(this)) {
	  if (underline) {
		setText("<html><u>" + text + "</u></html>");
	  }
	}
  }

  public void mouseExited(MouseEvent mouseEvent) {
	if (mouseEvent.getSource().equals(this)) {
	  setText("<html>" + text + "</html>");
	}
  }

  /**
   *
   * Setzt, ob sich der Cursor bei &Uuml;berfahren mit der Maus &auml;ndert
   *
   * @param state true, wenn der Cursor eine Hand werden soll
   */
  public void setHandCursor (boolean state) {
	if (state) {
	  setCursor(new Cursor(Cursor.HAND_CURSOR));
	}else {
	  setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
	}
  }

  /**
   *
   * Setzt, ob das Label bei &Uuml;berfahren mit der Maus unterstrichen werden
   * soll
   *
   * @param state true, wenn es unterstrichen werden soll
   */
  public void underlineOnMouseOver (boolean state) {
	underline = state;
  }

  public void mousePressed(MouseEvent mouseEvent) {
  }

  public void mouseReleased(MouseEvent mouseEvent) {
  }
}

Und der dazugehörige Listener (muss von deiner Klasse implementiert werden, wie ein ActionListener):
Code:
import java.awt.event.MouseEvent;

/**
 * <p>Überschrift: </p>
 * <p>Beschreibung: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Organisation: none</p>
 * @author Tobias Viehweger
 * @version 1.0
 */

public interface LinkLabelListener {

  public void clickedLabel(MouseEvent event);

}
 
Hi,

Dank euch beiden. So ähnlich wie in der ersten Antwort hatte ich es auch probiert, kam bloss nicht so ganz klar mit den MouseEvents. Die zweite Lösung hat natürlich auch ihren Reiz. :)

Grüsse

floggie
 
Zurück