Gyakorlati alapok IV.

Végre ablakozunk! (AWT, Swing, JavaFX)

 

Hiperhivatkozás (hyperlink)


A hiperhivatkozás (hyperlink) objektumot jól ismerjük a webböngészőkből: segítségével közvetlenül tudunk ugrálni weboldalak között.

 

www.informatika-programozas.hu - Hyperlink

Forrás - Source: www.volusion.com

 

Természetesen a Java-nyelv is implementálta, bár az egyszerű HTML-nyelvnél kissé bonyolultabb módon.

Hyperlink-objektumot legegyszerűbben JLabel() tulajdonságokkal rendelkező objektumként hozhatunk létre. Ekkor a Jlabel-re jellemző összes metódushoz hozzáférhetünk, az objektumot létrehozhatjuk, inicializálhatjuk, konfigurálhatjuk:

JLabel hyperlink = new JLabel();
hyperlink.setText("Visit my website!");
hyperlink.setForeground(Color.RED.darker());
hyperlink.setCursor(new Cursor(Cursor.HAND_CURSOR));
hyperlink.setFont(new Font("Serif", Font.PLAIN, 30));
hyperlink.setBounds(90, 25, 210, 100);


A hyperlink működéséhez azonban ennyi nem elég, hiszen emlékezzünk vissza: a hyperlink egyrészt tartalmazza a céloldal URL-címét (például http://www.informatika-programozas.hu), másrészt a kurzor a hyperlink fölé mozgatásával virtuális kesztyűvé vagy más alakzattá konvertálódik, amely egérkattintás hatására ugrást biztosít a megadott weboldal felé (azaz letölti azt az alapértelmezett böngészőbe).

Teljesen nyilvánvaló, hogy ez egy újabb, lekezelendő egéresemény. Aktiválásához először hozzá kell adnunk a hyperlink-objektumhoz az eseményfigyelést...

hyperlink.addMouseListener(new MouseAdapter()

...majd le kell kezelnünk a lehetséges egéreseményeket. Ezek lehetnek:

Itt jegyezzük meg, hogy a fenti 3 esemény közül a legfontosabb a mouseClicked(). A másik 2 eseményt akár üresen is hagyhatjuk. Ez a mouseClicked() metódus nagyon kényes és veszélyes feladatot lát el: a Desktop.getDesktop().browse(new URI("URL-cím")) függvény meghívásával “kinyúl” az operációs rendszerbe és a megadott URL-címmel aktiválva meghívja az alapértelmezett böngészőt. Ezen mozdulat veszélyessége okán kötelező a rutint try-catch blokkba tennünk. A lehetséges kivételeket pedig hibaüzenetes ablakkal jutalmazhatjuk:

JOptionPane.showMessageDialog(frame, "Connection was not successful!");

Az alábbi kódrészletben mindezeket tanulmányozhatjuk azzal a kis különbséggel, hogy lekezeltem a másik 2 egéreseményt is. Ezeknek bődületes hatásuk nem lesz a futásra, de legalább látjuk őket működés közben:

hyperlink.addMouseListener(new MouseAdapter() {

@Override
public void mouseClicked(MouseEvent e) {
    try {
        Desktop.getDesktop().browse(new URI("http://www.informatika-programozas.hu"));
    } catch (Exception ex) {
    JOptionPane.showMessageDialog(frame, "Connection was not successful!");
    }
}

@Override
public void mouseExited(MouseEvent e) {
    System.out.println("Mouse exited.");
}

@Override
public void mouseEntered(MouseEvent e) {
    System.out.println("Mouse entered.");
    }
});


Nincs más dolgunk, mint a fenti rutinokra egy minialkalmazást gyártani. Az alábbi implementáció a fent ismertetett funkciókat fogja teljesíteni. Nézzük meg a futtatható Java-kódot:
 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 



 

 

 

 

Main.java

 

public class Main {

public static void main(String[] args) {
    Window window = new Window();
    }
}


Window.java

import java.awt.*;
import java.awt.HeadlessException;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URI;
import javax.swing.*;

public class Window extends JFrame {

public Window() throws HeadlessException {
    JFrame frame = new JFrame();
    JLabel hyperlink = new JLabel();
    hyperlink.setText("Visit my website!");
    hyperlink.setForeground(Color.RED.darker());
    hyperlink.setCursor(new Cursor(Cursor.HAND_CURSOR));
    hyperlink.setFont(new Font("Serif", Font.PLAIN, 30));
    hyperlink.setBounds(90, 25, 210, 100);

    hyperlink.addMouseListener(new MouseAdapter() {

@Override
public void mouseClicked(MouseEvent e) {
    try {
        Desktop.getDesktop().browse(new URI("http://www.informatika-programozas.hu"));
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(frame, "Connection was not successful!");
    }
}

@Override
public void mouseExited(MouseEvent e) {
    System.out.println("Mouse exited.");
}

@Override
public void mouseEntered(MouseEvent e) {
    System.out.println("Mouse entered.");
    }
});

Center.java

import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;

public class Center {

void setCenter(JFrame frame) {
    Point center = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
    int x = (int) center.getX() - (frame.getWidth() / 2);
    int y = (int) center.getY() - (frame.getHeight() / 2);
    Point ablakCenter = new Point(x, y);
    frame.setLocation(ablakCenter);
    }
}

 

Végeredmény (a monitor közepén / felbontástól függetlenül/):

Az aktív területre kattintás hatására előugrik honlapom kezdőfejezete


www.informatika-programozas.hu - Hyperlink


Ugyanakkor fontos észrevennünk, hogy a hyperlink érvényességi területe (tehát az, amelyben a virtuális kesztyű aktiválódik) a hyperlink.setBounds(90, 25, 210, 100) függvényben beállított terület. Ha ezt valamilyen módon nem konfiguráljuk be, akkor az egész frame “hiperaktív” lesz.