Ответ 1
Вы можете установить курсор JLabel на Cursor.HAND_CURSOR, используя следующий код:
JLabel label = new JLabel("http://stackoverflow.com");
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
В html, когда мы создаем гиперссылку и указываем на нее, она автоматически изменяется на указатель пальца.
Так что мне было интересно, можем ли мы добиться этого в java-колебаниях. Предположим, что у меня есть метка при нажатии на которую появляется новая форма. Но я хочу, чтобы, когда пользователь указывает над меткой, она должна измениться на указатель пальца, показывая, что что-то выскочит, если его щелкнуть. Таким образом, мы можем дифференцировать эта метка с нормальными метками на форме, которую я думаю:).
Но как это сделать?
Вы можете установить курсор JLabel на Cursor.HAND_CURSOR, используя следующий код:
JLabel label = new JLabel("http://stackoverflow.com");
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
Как уже говорилось, вы хотите вызвать метод setCursor()
в JLabel и установить его в Cursor.Hand_CURSOR
, чтобы продолжить это, вы также можете подчеркнуть текст, чтобы сделать его похожим на HTML-ссылку, если вы хотите:):
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) {
//
}
}
}
}
}
Справка:
Ответ Хоссейна Мобашера хорош, и мой ответ очень поздний, но я просто хочу добавить, что вы также можете использовать его следующим образом.
JLabel label = new JLabel("http://stackoverflow.com");
label.setCursor(Cursor.HAND);
Это также будет работать, я попробовал это в Java 1.8