added javafx parts and style
This commit is contained in:
@@ -9,22 +9,22 @@ import java.util.Scanner;
|
|||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) throws InterruptedException {
|
public static void main(String[] args) throws InterruptedException {
|
||||||
Scanner scanner = new Scanner(System.in);
|
// Scanner scanner = new Scanner(System.in);
|
||||||
System.out.print("Enter a starting URL : ");
|
// System.out.print("Enter a starting URL : ");
|
||||||
String startUrl = scanner.nextLine().trim();
|
// String startUrl = scanner.nextLine().trim();
|
||||||
System.out.print("Enter a word to search for : ");
|
// System.out.print("Enter a word to search for : ");
|
||||||
String word = scanner.nextLine().trim();
|
// String word = scanner.nextLine().trim();
|
||||||
System.out.print("Enter the maximum amount of pages the crawler should visit : ");
|
// System.out.print("Enter the maximum amount of pages the crawler should visit : ");
|
||||||
int amount = Integer.parseInt(scanner.nextLine().trim());
|
// int amount = Integer.parseInt(scanner.nextLine().trim());
|
||||||
System.out.print("Should the crawler save the links with hits? (Y/N) : ");
|
// System.out.print("Should the crawler save the links with hits? (Y/N) : ");
|
||||||
boolean save = getChoice(scanner.nextLine());
|
// boolean save = getChoice(scanner.nextLine());
|
||||||
System.out.print("Do you want to enable debug mode? (Y/N) : ");
|
// System.out.print("Do you want to enable debug mode? (Y/N) : ");
|
||||||
boolean debug = getChoice(scanner.nextLine());
|
// boolean debug = getChoice(scanner.nextLine());
|
||||||
if (debug) System.out.println("[INFO] - Debug mode enabled");
|
// if (debug) System.out.println("[INFO] - Debug mode enabled");
|
||||||
// Application.launch(Visualiser.class);
|
Application.launch(Visualiser.class);
|
||||||
CrawlThread t = new CrawlThread(amount,save,debug,startUrl,word);
|
// CrawlThread t = new CrawlThread(amount,save,debug,startUrl,word);
|
||||||
t.start();
|
// t.start();
|
||||||
System.out.println(t.getCrawler().getResultPages());
|
// System.out.println(t.getCrawler().getResultPages());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean getChoice(String choice) {
|
private static boolean getChoice(String choice) {
|
||||||
|
|||||||
@@ -2,25 +2,37 @@ package main.java.webcrawler.visualiser;
|
|||||||
|
|
||||||
import javafx.animation.AnimationTimer;
|
import javafx.animation.AnimationTimer;
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.embed.swing.JFXPanel;
|
import javafx.geometry.HPos;
|
||||||
import javafx.scene.Group;
|
import javafx.geometry.Insets;
|
||||||
|
import javafx.geometry.Pos;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.canvas.Canvas;
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.ListView;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import org.jfree.fx.FXGraphics2D;
|
import org.jfree.fx.FXGraphics2D;
|
||||||
import org.jfree.fx.ResizableCanvas;
|
import org.jfree.fx.ResizableCanvas;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.geom.Line2D;
|
||||||
|
import java.awt.geom.Rectangle2D;
|
||||||
|
|
||||||
public class Visualiser extends Application {
|
public class Visualiser extends Application {
|
||||||
private double frameTime = 0;
|
private double frameTime = 0;
|
||||||
|
private BorderPane pane;
|
||||||
|
private ResizableCanvas canvas;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws Exception {
|
public void start(Stage primaryStage) throws Exception {
|
||||||
BorderPane pane = new BorderPane();
|
pane = new BorderPane();
|
||||||
ResizableCanvas canvas = new ResizableCanvas(this::draw, pane);
|
canvas = new ResizableCanvas(this::draw, pane);
|
||||||
canvas.setWidth(1600);
|
canvas.setWidth(1600);
|
||||||
canvas.setHeight(800);
|
canvas.setHeight(800);
|
||||||
pane.setCenter(canvas);
|
pane.setCenter(canvas);
|
||||||
|
initGUIElements();
|
||||||
FXGraphics2D g2d = new FXGraphics2D(canvas.getGraphicsContext2D());
|
FXGraphics2D g2d = new FXGraphics2D(canvas.getGraphicsContext2D());
|
||||||
draw(g2d);
|
draw(g2d);
|
||||||
primaryStage.setScene(new Scene(pane));
|
primaryStage.setScene(new Scene(pane));
|
||||||
@@ -29,9 +41,10 @@ public class Visualiser extends Application {
|
|||||||
|
|
||||||
new AnimationTimer() {
|
new AnimationTimer() {
|
||||||
long last = -1;
|
long last = -1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(long now) {
|
public void handle(long now) {
|
||||||
if(last == -1)
|
if (last == -1)
|
||||||
last = now;
|
last = now;
|
||||||
update((now - last) / 1000000000.0);
|
update((now - last) / 1000000000.0);
|
||||||
last = now;
|
last = now;
|
||||||
@@ -40,7 +53,53 @@ public class Visualiser extends Application {
|
|||||||
}.start();
|
}.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initGUIElements() {
|
||||||
|
HBox top = new HBox(200);
|
||||||
|
top.getStyleClass().add("content");
|
||||||
|
top.setPadding(new Insets(10, 10, 10, 10));
|
||||||
|
top.setPrefWidth(canvas.getWidth());
|
||||||
|
top.setPrefHeight(200);
|
||||||
|
pane.setTop(top);
|
||||||
|
pane.getStylesheets().add(getClass().getResource("../../../resources/stylesheets/visualiser.css").toExternalForm());
|
||||||
|
|
||||||
|
// start url, word to search, amount of pages, debug (?)
|
||||||
|
TextField urlField = new TextField();
|
||||||
|
urlField.setPromptText("Enter the starting url");
|
||||||
|
TextField wordField = new TextField();
|
||||||
|
wordField.setPromptText("Enter the word to search for");
|
||||||
|
TextField amountField = new TextField();
|
||||||
|
amountField.setPromptText("Maximum amount of pages the crawler should visit..");
|
||||||
|
VBox content = new VBox(10);
|
||||||
|
content.setAlignment(Pos.CENTER_LEFT);
|
||||||
|
content.setMinWidth(400);
|
||||||
|
content.setPadding(new Insets(0, 0, 0, 100));
|
||||||
|
content.getChildren().addAll(
|
||||||
|
new Label("Starting url:"),
|
||||||
|
urlField,
|
||||||
|
new Label("Word to search for:"),
|
||||||
|
wordField,
|
||||||
|
new Label("Maximum amount of pages the crawler should visit:"),
|
||||||
|
amountField);
|
||||||
|
top.getChildren().add(content);
|
||||||
|
|
||||||
|
ListView<String> debugWindow = new ListView<>();
|
||||||
|
debugWindow.setMinWidth(1100);
|
||||||
|
top.setAlignment(Pos.CENTER_LEFT);
|
||||||
|
top.getChildren().add(debugWindow);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void draw(FXGraphics2D graphics) {
|
public void draw(FXGraphics2D graphics) {
|
||||||
|
graphics.setBackground(new Color(43, 43, 46));
|
||||||
|
graphics.clearRect(0, 0, (int) canvas.getWidth(), (int) canvas.getHeight());
|
||||||
|
|
||||||
|
graphics.setColor(Color.red);
|
||||||
|
graphics.draw(new Rectangle2D.Double(10, 10, 500, 500));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void updateFrame() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,8 +111,4 @@ public class Visualiser extends Application {
|
|||||||
this.frameTime = 0d;
|
this.frameTime = 0d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateFrame() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
28
src/main/resources/stylesheets/visualiser.css
Normal file
28
src/main/resources/stylesheets/visualiser.css
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
.content {
|
||||||
|
-fx-background-color: #2b2b2e;
|
||||||
|
-fx-font-family: Consolas;
|
||||||
|
-fx-border-style: solid;
|
||||||
|
-fx-border-width: 0.5px;
|
||||||
|
-fx-border-color: #9cb8ae;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
-fx-text-fill: #13e89a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-field {
|
||||||
|
-fx-background-color: #7a7a7a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-field:focused {
|
||||||
|
-fx-text-fill: #13e89a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-view {
|
||||||
|
-fx-background-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-cell {
|
||||||
|
-fx-background-color: black;
|
||||||
|
-fx-text-fill: #00d60e;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user