Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
Eseménykezelés + Button + IP-cím
Az előző, Eseménykezelés + Button + exit című fejezetben megtanultuk egy gombesemény egyszerű lekezelését. Ebben a fejezetben a gombeseményhez DNS-lekérdezést fogunk hozzárendelni, ennek rutinja és magyarázatai pedig a Label + IP-cím című fejezetben került kidolgozásra. Az említett 2 fejezet főrutinjait tehát egybegyúrjuk, azonban a zavarmentes működéshez 1-2 további változtatást is szükséges tennünk, például néhány objektumot osztályszintre kell helyeznünk, hogy Window osztály összes metódus lássa:
class Window
extends JFrame {
String hostName = "x";
String ipNumber = "";
JFrame frame = new JFrame();
JButton button = new JButton("Resolve!");
JLabel label = new JLabel();
Láthatóan visszahoztunk egy label-objektumot is. A gombesemény hatására a label eredeti szövege ("The IP-number is...") megváltozik a konkrét IP-címre (label.setText(ipNumber);). A hostnevet a String hostName objektumba írtunk bele. (A teljes kiosztott hostnevet személyi okokból nem osztom meg: String hostName = "x";.)
Main.java
public class Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import javax.swing.*;
class Window extends JFrame {
String hostName = "x";
String ipNumber = "";
JFrame frame = new JFrame();
JButton button = new JButton("Resolve!");
JLabel label = new JLabel();
Window() {
super();
button.setBounds(150, 100, 90, 25);
label.setBounds(150, 140, 200, 25);
frame.add(button);
frame.add(label);
label.setText("The IP-number is...");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(event -> buttonAction());
Center center = new Center();
frame.setSize(400, 300);
frame.setTitle("PJP - Penzes Java Programming");
center.setCenter(frame);
frame.setLayout(null);
frame.setVisible(true);
}
private void buttonAction() {
try{
ipNumber =
java.net.InetAddress.getByName(hostName).getHostAddress();
label.setText(ipNumber);
}catch(Exception ex){
System.out.println("Resolution was
not successful.");
}
}
}
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/):
-
exit és a Resolve! gomb működik