Learn Typing Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Computer Fundamentals English English Conversations Problem Solving

JavaFXبرنامج كاشف عناوين المواقع و الأجهزة IP Finder

في هذا الدرس ستتعلم طريقة إنشاء برنامج ( IP Finder ) و الذي يمكن إستخدامه لجلب عنوان أي شيء متصل بالنت سواء كان سيرفر, حاسوب, هاتف إلخ..

java swing ip finder source code تحميل كود برنامج كاشف عناوين المواقع و الأجهزة في جافا


بناء البرنامج

  • ملفات الجافا وضعناها مباشرةً في المشروع.
  • الصور وضعناه بداخل مجلد إسمه images.


خيارات التحميل

⇓ تحميل البرنامج ⇓ تحميل المشروع كاملاً ⇓ تحميل مجلد الصور فقط



كود البرنامج

Main.java
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;
@Override
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);
}
}
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; @Override 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); } }

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة