Resúmenes
Apuntes universitarios en formato Markdown desde Obsidian.
Download da URL con JavaFX
download Descargar MDNella cartella src/main/java andremo ad elencare i package di seguito, mentre nella cartella src/main/resources si trova il file css style.css. Tutto il programma gira sul view MainWindow.fxml presente in src/main/java/application/view. Il file style.css è il seguente:
// questa modifica di stile vale per tutti gli oggetti Button
.button {
-fx-background-color: red;
}
// questa modifica di stile vale per tutti gli oggetti che richiamano lo stile "mystyle"
.mystyle {
-fx-background-color: green;
}
PACKAGE application
Per quanto riguarda il file Main.java:
package application;
public class Main {
public static void main(String[] args) {
MainApplication.main(args);
}
}
Per quanto riguarda il file MainApplication.java (una sorta di main):
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class MainApplication extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader1 = new FXMLLoader(getClass().getResource("/application/view/MainWindow.fxml"));
AnchorPane root1 = (AnchorPane) loader1.load();
Scene scene = new Scene(root1,600,600);
scene.getStylesheets().add(getClass().
getResource("/application/css/style.css").toExternalForm());
primaryStage.setTitle("Load");
primaryStage.setScene(scene);
primaryStage.setMinHeight(600);
primaryStage.setMaxHeight(600);
primaryStage.show();
}
public static void main(String[] args) { launch(args); }
}
Per quanto riguarda il file DownloadFromUrl.java (sia download pagina che download immagine):
package application;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.scene.image.Image;
public class DownloadFromUrl extends Service<Object> {
private String urlText;
private boolean downloadImage;
@Override
protected Task<Object> createTask() {
return new Task<Object>() {
@Override
protected Object call() throws Exception {
if (downloadImage) {
Image image = new Image(urlText, 100, 100, true, true);
return image;
} else {
URL url = new URL(urlText);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuilder builder = new StringBuilder();
while (reader.ready()) {
String line = reader.readLine();
builder.append(line);
}
reader.close();
return builder.toString();
}
}
};
}
public void setUrlAndType(String text, boolean downloadImage) {
urlText = text;
this.downloadImage = downloadImage;
}
}
PACKAGE application.controller
Per quanto riguarda il file MainWindowController.java:
package application.controller;
import application.DownloadFromUrl;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
public class MainWindowController {
@FXML
private BorderPane borderPane;
@FXML
private Button loadImageButton;
@FXML
private Button loadButton;
@FXML
private TextField urlField;
private DownloadFromUrl downloadFromUrl = new DownloadFromUrl();
@FXML
void load(ActionEvent event) {
String text = urlField.getText();
downloadFromUrl.setUrlAndType(text, false);
downloadFromUrl.restart();
}
@FXML
void loadImage(ActionEvent event) {
String text = urlField.getText();
downloadFromUrl.setUrlAndType(text, true);
downloadFromUrl.restart();
}
@FXML
void initialize() {
loadButton.getStyleClass().add("mystyle");
downloadFromUrl.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
if (event.getSource().getValue() instanceof String) {
String result = (String) event.getSource().getValue();
TextArea t = new TextArea();
t.setText(result);
t.setEditable(false);
borderPane.setCenter(t);
} else if(event.getSource().getValue() instanceof Image) {
Image img = (Image) event.getSource().getValue();
Label l = new Label("", new ImageView(img));
borderPane.setCenter(l);
}
}
});
downloadFromUrl.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Connection error");
alert.setContentText("Cannot load URL: check your connection and the inserted URL");
alert.showAndWait();
}
});
}
}