JavaFXبرنامج كاشف عناوين المواقع و الأجهزة IP Finder
في هذا الدرس ستتعلم طريقة إنشاء برنامج ( IP Finder ) و الذي يمكن إستخدامه لجلب عنوان أي شيء متصل بالنت سواء كان سيرفر, حاسوب, هاتف إلخ..
بناء البرنامج
- ملفات الجافا وضعناها مباشرةً في المشروع.
- الصور وضعناه بداخل مجلد إسمه
images
.
خيارات التحميل
⇓ تحميل البرنامج ⇓ تحميل المشروع كاملاً ⇓ تحميل مجلد الصور فقط
كود البرنامج
import java.net.InetAddress; import java.net.UnknownHostException; import javafx.application.Application; import javafx.geometry.Pos; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { // هنا قمنا بتعريف الأشياء التي سيتم وضعها في النافذة Pane backgroundPane; ImageView imageView; Label label, labelResult, labelDevelopedBy; TextField textField; Button buttonFind; public void start(Stage stage) { // هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في النافذة backgroundPane = new Pane(); imageView = new ImageView(new Image(getClass().getResourceAsStream("/images/world-map.png"))); label = new Label("Enter Domain"); textField = new TextField(); buttonFind = new Button("Get IP"); labelResult = new Label(""); labelDevelopedBy = new Label("Developed by harmash.com"); // هنا قمنا بتحديد حجم كل شيء سيتم إضافته في الحاوية الرئيسية التي سنضعها في النافذة backgroundPane.setPrefSize(600, 340); imageView.setFitWidth(620); imageView.setFitHeight(360); label.setPrefSize(200, 30); textField.setPrefSize(200, 36); buttonFind.setPrefSize(200, 36); labelResult.setPrefSize(600, 30); labelDevelopedBy.setPrefSize(600, 30); // هنا قمنا بتحديد مكان ظهور كل شيء سيتم إضافته في الحاوية الرئيسية التي سنضعها في النافذة label.setTranslateX(200); label.setTranslateY(75); textField.setTranslateX(200); textField.setTranslateY(115); buttonFind.setTranslateX(200); buttonFind.setTranslateY(165); labelResult.setTranslateX(0); labelResult.setTranslateY(225); labelDevelopedBy.setTranslateX(0); labelDevelopedBy.setTranslateY(300); // يظهر في وسطهم labelDevelopedBy و labelResult ,textField ,label هنا قمنا بجعل نص الكائنات label.setAlignment(Pos.CENTER); textField.setAlignment(Pos.CENTER); labelResult.setAlignment(Pos.CENTER); labelDevelopedBy.setAlignment(Pos.CENTER); // ( نوع خطه, حجمه, سمكه, لونه ) label هنا قمنا يتعديل تصميم الكائن label.setStyle( "-fx-font-family: Arial;" + "-fx-font-size: 20px;" + "-fx-text-fill: white;" + "-fx-font-weight: bold;" ); // ( نوع خطه, حجمه, سمكه, لونه, مع تحديد لون و سمك حدوده و لون خلفيته ) textField هنا قمنا يتعديل تصميم الكائن textField.setStyle( "-fx-font-family: Arial;" + "-fx-font-size: 16px;" + "-fx-text-fill: lightgrey;" + "-fx-border-color: gray;" + "-fx-border-style: solid;" + "-fx-border-width: 2px;" + "-fx-background-color: black;" ); // ( نوع خطه, حجمه, سمكه, لونه, مع تحديد لون و سمك حدوده و لون خلفيته ) buttonFind هنا قمنا يتعديل تصميم الكائن buttonFind.setStyle( "-fx-font-family: Arial;" + "-fx-font-size: 16px;" + "-fx-text-fill: lightgrey;" + "-fx-border-color: gray;" + "-fx-border-style: solid;" + "-fx-border-width: 2px;" + "-fx-background-color: #333;" + "-fx-cursor: hand;" ); // ( نوع خطه, حجمه, سمكه ) labelResult هنا قمنا يتعديل تصميم الكائن labelResult.setStyle( "-fx-font-family: Arial;" + "-fx-font-size: 18px;" + "-fx-font-weight: bold;" ); // ( نوع خطه, حجمه, سمكه, لونه ) labelDevelopedBy هنا قمنا يتعديل تصميم الكائن labelDevelopedBy.setStyle( "-fx-font-family: Arial;" + "-fx-font-size: 16px;" + "-fx-text-fill: Blue;" + "-fx-font-weight: bold;" ); // buttonFind هنا قمنا بتحديد ما سيحدث عند النقر على الكائن buttonFind.setOnAction((ActionEvent) -> { // url سيتم تخزين النص الموجود في مربع النص في الكائن String url = textField.getText(); // labelResult إذا لم يكن مربع النص فارغاً سيحاول البرنامج الإتصال بالنت و جلب عنوان الموقع المذكور و وضعه كنص للكائن if (!url.isEmpty()) { try { InetAddress address = InetAddress.getByName(url); String ip = address.getHostAddress(); labelResult.setText(ip); labelResult.setTextFill(Color.GREEN); } catch (UnknownHostException ex) { labelResult.setText("Invalid URL or Network is Down"); labelResult.setTextFill(Color.RED); } } // إذا كان مربع النص فارغاً عند النقر على الزر, سيتم إظهار النص التالي و تلوينه بالأحمر else { labelResult.setText("Please enter a valid URL in the above field"); labelResult.setTextFill(Color.RED); } }); // في النافذة Root Node و الذي ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس Group root = new Group(); // هنا قمنا بإضافة جميع الأشياء التي قمنا بإنشائها في النافذة root.getChildren().add(backgroundPane); root.getChildren().add(imageView); root.getChildren().add(label); root.getChildren().add(textField); root.getChildren().add(buttonFind); root.getChildren().add(labelResult); root.getChildren().add(labelDevelopedBy); // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن Scene scene = new Scene(root, 600, 340); // هنا وضعنا عنوان للنافذة stage.setTitle("Ip Finder"); // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ stage.setScene(scene); // هنا قمنا بإظهار النافذة stage.show(); // هنا جعلنا المستخدم غير قادر على تكبير أو تصغير حجم النافذة بنفسه stage.setResizable(false); } // هنا قمنا بتشغيل التطبيق public static void main(String[] args) { launch(args); } }