Gyakorlati alapok IV.

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

 

Label + IP-cím

 

Ebben a rövid fejezetben egy label objektumon keresztül kiírjuk az aktuális IP-címeinket. A hálózati ismeretekben kevésbé jártasak a Hálózati alapfogalmak című fejezetből pótolhatják a szükséges alapismereteket.

 

Programozási kiindulópontunk a frame-en belül minden oldalról középre igazított felirat és ennek alapkódja:

 

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 javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

class Window extends JFrame {
    Window() {
        super();
        JFrame frame = new JFrame();
        JLabel label = new JLabel();
        label.setText("PJP - Penzes Java Programming");
        frame.add(label);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setVerticalAlignment(SwingConstants.CENTER);
        Center center = new Center();
        frame.setSize(400, 300);
        frame.setTitle("PJP - Penzes Java Programming");
        center.setCenter(frame);
        frame.setVisible(true);
    }
}

 

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/):

www.informatika-programozas.hu - Frame + Label

 

Az aktuális IP-cím a label új szövege lesz.

 

www.informatika-programozas.hu - További információk!

Amit ehhez még mindenféleképpen tudnunk kell, hogy az IP-címhez mindig tartozik egy név is (host name vagy domain name, illetve ezek kombinációja), hiszen éppen ez a név-szám hozzárendelés a lényege a DNS-szolgáltatásnak (Domain Name System): a nehezen megjegyezhető IP-címeket nevekre fordítja át. Magát a lekérdezési folyamatot névfeloldásnak (host name resolution) nevezzük.

 

Gépünk alapszintű, TCP/IP alapú hálózati működéséhez sokfelől szerezhetünk IP-címet (nem említve a további hacker-vacakolásokat):

  1. alapértelmezésben minden gép belső hálózati IP-címe 127.0.0.1, hostnév ekkor localhost,

  2. konfigurált routerünk saját DHCP-szerverén keresztül kioszthat gépünk számára egy belső hálózati IP-címet, például 192.168.0.10,

  3. az Internetre való felmenetelkor a szerződött Internet-szolgáltatónk fog nekünk egy IP-címet, vele egy hostnevet kiosztani.

Olyan szoftveres rutingyűjteményt keresünk tehát a Java-rendszeren belül, amelyik az 1. és a 3. pont szerinti névfeloldást képes megoldani. A dedikált osztályunk az InetAddress lesz a java.net csomagban, a láncolt utasítássorozat végeredményét rögtön 1 egyszerű String-objektumba vezetjük:

 

ipNumber = java.net.InetAddress.getByName(hostName).getHostAddress();

 

Mivel kényes, hálózati működésről van szó, a Java-rendszer szoftvermérnökei kötelező kivételkezelést írtak elő a rutinok köré:

 

try{
    ipNumber = java.net.InetAddress.getByName(hostName).getHostAddress();
    }catch(Exception ex){
        System.out.println("Resolution is not successful.");
}

 

Először ellenőrizzük le, hogy a belső hálózati IP-címünk 127.0.0.1 és ezt valóban a localhost név reprezentálja (String hostName = "localhost";):

 

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 javax.swing.*;

class Window extends JFrame {
    Window() {
    super();
    String hostName = "localhost";
    String ipNumber = "";
    try{
        ipNumber = java.net.InetAddress.getByName(hostName).getHostAddress();
        }catch(Exception ex){
            System.out.println("Resolution was not successful.");
        }
    JFrame frame = new JFrame();
    JLabel label = new JLabel();
    label.setText("My IP-number is " + ipNumber);
    frame.add(label);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    label.setHorizontalAlignment(SwingConstants.CENTER);
    label.setVerticalAlignment(SwingConstants.CENTER);
    Center center = new Center();
    frame.setSize(400, 300);
    frame.setTitle("PJP - Penzes Java Programming");
    center.setCenter(frame);
    frame.setVisible(true);
    }
}

 

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/):

www.informatika-programozas.hu - Frame + Label

 

A névfeloldás automatikusan működik, bár most egyértelműen a Java-rendszeren keresztül lett elindítva.

 

A szerződött Internet-szolgáltatónk által kiosztott IP-cím lekérdezéséhez meg kell tudnunk az általa szintén kiosztott hostnevet. Erre egy lehetőség a jelen honlap látogatásszámlálójának felhasználása (www.informatika-programozas.hu/stat.php), amely persze ebben az esetben az IP-címet is meg fogja mondani, ezért ezt már csak le kell ellenőriznünk. (A teljes kiosztott hostnevet személyi okokból nem osztom meg: String hostName = "x";.)

 

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 javax.swing.*;

class Window extends JFrame {
    Window() {
    super();
    String hostName = "x";
    String ipNumber = "";
    try{
        ipNumber = java.net.InetAddress.getByName(hostName).getHostAddress();
        }catch(Exception ex){
            System.out.println("Resolution was not successful.");
        }
    JFrame frame = new JFrame();
    JLabel label = new JLabel();
    label.setText("My IP-number is " + ipNumber);
    frame.add(label);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    label.setHorizontalAlignment(SwingConstants.CENTER);
    label.setVerticalAlignment(SwingConstants.CENTER);
    Center center = new Center();
    frame.setSize(400, 300);
    frame.setTitle("PJP - Penzes Java Programming");
    center.setCenter(frame);
    frame.setVisible(true);
    }
}

 

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/):

www.informatika-programozas.hu - Frame + Label