mirror of
https://github.com/robertvokac/time-calc.git
synced 2025-03-25 07:27:49 +01:00
Added a web browser
This commit is contained in:
parent
eab2a69bc4
commit
3f5a39ff85
@ -72,6 +72,17 @@
|
|||||||
<artifactId>flatlaf</artifactId>
|
<artifactId>flatlaf</artifactId>
|
||||||
<version>3.4.1</version>
|
<version>3.4.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjfx</groupId>
|
||||||
|
<artifactId>javafx-controls</artifactId>
|
||||||
|
<version>21</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjfx</groupId>
|
||||||
|
<artifactId>javafx-web</artifactId>
|
||||||
|
<version>21</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -426,6 +426,12 @@ public class TimeCalcConfiguration {
|
|||||||
}
|
}
|
||||||
return mapOfProperties.get(timeCalcProperty);
|
return mapOfProperties.get(timeCalcProperty);
|
||||||
}
|
}
|
||||||
|
public String getProperty(String key) {
|
||||||
|
return timeCalcProperties.getString(key);
|
||||||
|
}
|
||||||
|
public void setProperty(String key, String value) {
|
||||||
|
timeCalcProperties.setString(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
public String print() {
|
public String print() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
@ -83,6 +83,14 @@ public class TimeCalcProperties {
|
|||||||
getDefaultStringValue(timeCalcProperty)));
|
getDefaultStringValue(timeCalcProperty)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getString(String key) {
|
||||||
|
return (String) properties.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setString(String key, String value) {
|
||||||
|
properties.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
private String getDefaultStringValue(TimeCalcProperty timeCalcProperty) {
|
private String getDefaultStringValue(TimeCalcProperty timeCalcProperty) {
|
||||||
if (!defaultProperties
|
if (!defaultProperties
|
||||||
.containsKey(timeCalcProperty.getKey())) {
|
.containsKey(timeCalcProperty.getKey())) {
|
||||||
|
@ -101,7 +101,11 @@ public class Widget extends JPanel implements
|
|||||||
private WidgetMenu widgetMenu = null;
|
private WidgetMenu widgetMenu = null;
|
||||||
public Widget() {
|
public Widget() {
|
||||||
setBackground(BACKGROUND_COLOR);
|
setBackground(BACKGROUND_COLOR);
|
||||||
new Timer(getTimerDelay(), e -> repaint()).start();
|
int timerDelay = getTimerDelay();
|
||||||
|
// if(timerDelay > 10) {
|
||||||
|
// timerDelay = 10;
|
||||||
|
// }
|
||||||
|
new Timer(timerDelay, e -> repaint()).start();
|
||||||
this.addMouseMotionListener(new MouseMotionListener() {
|
this.addMouseMotionListener(new MouseMotionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseDragged(MouseEvent e) {
|
public void mouseDragged(MouseEvent e) {
|
||||||
@ -208,7 +212,7 @@ public class Widget extends JPanel implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getTimerDelay() {
|
public int getTimerDelay() {
|
||||||
return 100;
|
return 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
// @Override
|
||||||
|
@ -104,7 +104,7 @@ public class MainWindow extends TWindow {
|
|||||||
private final TButton restartButton;
|
private final TButton restartButton;
|
||||||
private final TButton focusButton;
|
private final TButton focusButton;
|
||||||
private final TButton helpButton;
|
private final TButton helpButton;
|
||||||
private final TButton weatherButton;
|
private final TButton webBrowserButton;
|
||||||
private final TButton commandButton;
|
private final TButton commandButton;
|
||||||
private final TButton jokeButton;
|
private final TButton jokeButton;
|
||||||
private final AboutButton aboutButton;
|
private final AboutButton aboutButton;
|
||||||
@ -254,7 +254,7 @@ public class MainWindow extends TWindow {
|
|||||||
this.exitButton = new TButton("Exit");
|
this.exitButton = new TButton("Exit");
|
||||||
this.focusButton = new TButton(allowOnlyBasicFeaturesProperty.getValue() ? " " : "Focus");
|
this.focusButton = new TButton(allowOnlyBasicFeaturesProperty.getValue() ? " " : "Focus");
|
||||||
this.helpButton = new TButton("Help");
|
this.helpButton = new TButton("Help");
|
||||||
this.weatherButton = new TButton("Weather");
|
this.webBrowserButton = new TButton("Browse");
|
||||||
this.commandButton = new TButton("Command");
|
this.commandButton = new TButton("Command");
|
||||||
this.jokeButton = new TButton("Joke");
|
this.jokeButton = new TButton("Joke");
|
||||||
this.aboutButton = new AboutButton();
|
this.aboutButton = new AboutButton();
|
||||||
@ -360,7 +360,7 @@ public class MainWindow extends TWindow {
|
|||||||
add(walkingHumanProgress);
|
add(walkingHumanProgress);
|
||||||
walkingHumanProgress.visibleProperty
|
walkingHumanProgress.visibleProperty
|
||||||
.bindTo(timeCalcConfiguration.walkingHumanVisibleProperty);
|
.bindTo(timeCalcConfiguration.walkingHumanVisibleProperty);
|
||||||
weatherButton
|
webBrowserButton
|
||||||
.setBounds(SwingUtils.MARGIN, walkingHumanProgress.getY()
|
.setBounds(SwingUtils.MARGIN, walkingHumanProgress.getY()
|
||||||
+ walkingHumanProgress.getHeight());
|
+ walkingHumanProgress.getHeight());
|
||||||
|
|
||||||
@ -631,6 +631,7 @@ public class MainWindow extends TWindow {
|
|||||||
add(elapsedTextField);
|
add(elapsedTextField);
|
||||||
add(remainingTextFieldLabel);
|
add(remainingTextFieldLabel);
|
||||||
add(remainingTextField);
|
add(remainingTextField);
|
||||||
|
add(webBrowserButton);
|
||||||
}
|
}
|
||||||
if(!allowOnlyBasicFeaturesProperty.getValue()) {
|
if(!allowOnlyBasicFeaturesProperty.getValue()) {
|
||||||
add(saveButton);
|
add(saveButton);
|
||||||
@ -672,6 +673,7 @@ public class MainWindow extends TWindow {
|
|||||||
configButton.setBoundsFromTop(weekLabel);
|
configButton.setBoundsFromTop(weekLabel);
|
||||||
workDaysButton.setBoundsFromLeft(configButton);
|
workDaysButton.setBoundsFromLeft(configButton);
|
||||||
activitiesButton.setBoundsFromLeft(workDaysButton);
|
activitiesButton.setBoundsFromLeft(workDaysButton);
|
||||||
|
webBrowserButton.setBoundsFromLeft(activitiesButton);
|
||||||
|
|
||||||
exitButton.setBounds(saveButton.getX() + saveButton.getWidth() - activitiesButton.getWidth(), workDaysButton.getY(), activitiesButton.getWidth(), activitiesButton.getHeight());
|
exitButton.setBounds(saveButton.getX() + saveButton.getWidth() - activitiesButton.getWidth(), workDaysButton.getY(), activitiesButton.getWidth(), activitiesButton.getHeight());
|
||||||
restartButton.setBounds(exitButton.getX() - SwingUtils.MARGIN - activitiesButton.getWidth(), activitiesButton.getY(), activitiesButton.getWidth(), activitiesButton.getHeight());
|
restartButton.setBounds(exitButton.getX() - SwingUtils.MARGIN - activitiesButton.getWidth(), activitiesButton.getY(), activitiesButton.getWidth(), activitiesButton.getHeight());
|
||||||
@ -694,8 +696,8 @@ public class MainWindow extends TWindow {
|
|||||||
|
|
||||||
setTitle(getWindowTitle());
|
setTitle(getWindowTitle());
|
||||||
|
|
||||||
weatherButton
|
webBrowserButton
|
||||||
.addActionListener(e -> new WeatherWindow().setVisible(true));
|
.addActionListener(e -> WebBrowser.show(timeCalcConfiguration));
|
||||||
commandButton.addActionListener(
|
commandButton.addActionListener(
|
||||||
new CommandActionListener(timeCalcApp, timeCalcConfiguration));
|
new CommandActionListener(timeCalcApp, timeCalcConfiguration));
|
||||||
|
|
||||||
|
@ -1,160 +0,0 @@
|
|||||||
package org.nanoboot.utils.timecalc.swing.windows;
|
|
||||||
|
|
||||||
import org.nanoboot.utils.timecalc.utils.common.Utils;
|
|
||||||
|
|
||||||
import javax.swing.JEditorPane;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.xml.transform.OutputKeys;
|
|
||||||
import javax.xml.transform.Source;
|
|
||||||
import javax.xml.transform.Transformer;
|
|
||||||
import javax.xml.transform.TransformerFactory;
|
|
||||||
import javax.xml.transform.stream.StreamResult;
|
|
||||||
import javax.xml.transform.stream.StreamSource;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.StringReader;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Robert Vokac
|
|
||||||
* @since 16.02.2024
|
|
||||||
*/
|
|
||||||
public class WeatherWindow extends JFrame {
|
|
||||||
|
|
||||||
public WeatherWindow() {
|
|
||||||
this.setSize(400, 300);
|
|
||||||
|
|
||||||
JEditorPane jep = new JEditorPane();
|
|
||||||
jep.setEditable(false);
|
|
||||||
JScrollPane scrollPane = new JScrollPane(jep);
|
|
||||||
scrollPane.setBounds(10, 10, 750, 550);
|
|
||||||
getContentPane().add(scrollPane);
|
|
||||||
|
|
||||||
// File proxyTxt = new File("proxy.txt");
|
|
||||||
// if (!proxyTxt.exists()) {
|
|
||||||
// jep.setText("Sorry, file proxy.txt was not found.");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// final HttpProxy httpProxy;
|
|
||||||
// try {
|
|
||||||
// httpProxy = new HttpProxy(proxyTxt);
|
|
||||||
// } catch (RuntimeException e) {
|
|
||||||
// jep.setContentType("text/html");
|
|
||||||
// jep.setText(e.getMessage());
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
try {
|
|
||||||
String pocasiHtml = null;
|
|
||||||
File pocasiHtmlFile = new File("pocasi.html");
|
|
||||||
try {
|
|
||||||
pocasiHtml = downloadFile("https://pocasi.seznam.cz/praha");
|
|
||||||
pocasiHtml = prettyFormatXml(pocasiHtml, 4);
|
|
||||||
Utils.writeTextToFile(pocasiHtmlFile, pocasiHtml);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
pocasiHtml = pocasiHtmlFile.exists()
|
|
||||||
? Utils.readTextFromFile(pocasiHtmlFile)
|
|
||||||
: "Sorry, pocasi.html was not found.";
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
boolean ogm_detailed_forecast_Started = false;
|
|
||||||
for (String line : pocasiHtml.split("\\r?\\n|\\r")) {
|
|
||||||
|
|
||||||
if (line.contains("ogm-detailed-forecast")) {
|
|
||||||
ogm_detailed_forecast_Started = true;
|
|
||||||
}
|
|
||||||
if (ogm_detailed_forecast_Started && line
|
|
||||||
.contains("<button aria-label=")) {
|
|
||||||
String l = line
|
|
||||||
.trim()
|
|
||||||
.replace("<button aria-label=\"", "")
|
|
||||||
.split("class")[0];
|
|
||||||
sb.append(l);
|
|
||||||
sb.append("<br>\n\n");
|
|
||||||
System.out.println("Found another line");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pocasiHtml = sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
jep.setContentType("text/html");
|
|
||||||
jep.setText("<html><head><meta charset=\"UTF-8\"></head><body>"
|
|
||||||
+ pocasiHtml + "</body></html>");
|
|
||||||
Utils.writeTextToFile(new File("aaa"),
|
|
||||||
"<html><head><meta charset=\"UTF-8\"></head><body>"
|
|
||||||
+ pocasiHtml + "</body></html>");
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
jep.setContentType("text/html");
|
|
||||||
jep.setText("<html>Could not load " + e.getMessage() + "</html>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String prettyFormatXml(final String input,
|
|
||||||
final int indent) {
|
|
||||||
try {
|
|
||||||
Source xmlInput = new StreamSource(new StringReader(input));
|
|
||||||
StringWriter stringWriter = new StringWriter();
|
|
||||||
StreamResult xmlOutput = new StreamResult(stringWriter);
|
|
||||||
TransformerFactory transformerFactory
|
|
||||||
= TransformerFactory.newInstance();
|
|
||||||
|
|
||||||
transformerFactory.setAttribute("indent-number", indent);
|
|
||||||
|
|
||||||
Transformer transformer = transformerFactory.newTransformer();
|
|
||||||
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
|
||||||
transformer.transform(xmlInput, xmlOutput);
|
|
||||||
return xmlOutput.getWriter().toString();
|
|
||||||
} catch (Throwable e) {
|
|
||||||
try {
|
|
||||||
Source xmlInput = new StreamSource(new StringReader(input));
|
|
||||||
StringWriter stringWriter = new StringWriter();
|
|
||||||
StreamResult xmlOutput = new StreamResult(stringWriter);
|
|
||||||
TransformerFactory transformerFactory
|
|
||||||
= TransformerFactory.newInstance();
|
|
||||||
Transformer transformer = transformerFactory.newTransformer();
|
|
||||||
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
|
||||||
transformer.setOutputProperty(
|
|
||||||
"{http://xml.apache.org/xslt}indent-amount",
|
|
||||||
String.valueOf(indent));
|
|
||||||
transformer.transform(xmlInput, xmlOutput);
|
|
||||||
return xmlOutput.getWriter().toString();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String downloadFile(String urlString)
|
|
||||||
throws IOException {
|
|
||||||
|
|
||||||
URL url = new URL(urlString);
|
|
||||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
|
||||||
conn.connect();
|
|
||||||
BufferedReader br = null;
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
if (conn.getResponseCode() == 200) {
|
|
||||||
br = new BufferedReader(
|
|
||||||
new InputStreamReader(conn.getInputStream()));
|
|
||||||
String strCurrentLine;
|
|
||||||
while ((strCurrentLine = br.readLine()) != null) {
|
|
||||||
sb.append(strCurrentLine).append("\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
br = new BufferedReader(
|
|
||||||
new InputStreamReader(conn.getErrorStream()));
|
|
||||||
String strCurrentLine;
|
|
||||||
while ((strCurrentLine = br.readLine()) != null) {
|
|
||||||
sb.append(strCurrentLine).append("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,192 @@
|
|||||||
|
package org.nanoboot.utils.timecalc.swing.windows;
|
||||||
|
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.application.Platform;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.control.ChoiceDialog;
|
||||||
|
import javafx.scene.control.TextInputDialog;
|
||||||
|
import javafx.scene.input.KeyCode;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
|
import javafx.scene.web.WebEngine;
|
||||||
|
import javafx.scene.web.WebView;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import org.nanoboot.utils.timecalc.app.TimeCalcConfiguration;
|
||||||
|
import org.nanoboot.utils.timecalc.utils.common.Utils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author pc00289
|
||||||
|
* @since 26.04.2024
|
||||||
|
*/
|
||||||
|
public class WebBrowser extends Application {
|
||||||
|
|
||||||
|
private static final String BROWSE = "browse.";
|
||||||
|
public static final String DIGIT = "DIGIT";
|
||||||
|
private static Stage stage = null;
|
||||||
|
|
||||||
|
private static Map<String, String> urls = null;
|
||||||
|
private static TimeCalcConfiguration timeCalcConfiguration;
|
||||||
|
|
||||||
|
public static void show(TimeCalcConfiguration timeCalcConfigurationIn) {
|
||||||
|
timeCalcConfiguration = timeCalcConfigurationIn;
|
||||||
|
if (urls == null) {
|
||||||
|
urls = new HashMap<>();
|
||||||
|
for (int i = 0; i <= 9; i++) {
|
||||||
|
String key = BROWSE + DIGIT + i;
|
||||||
|
String value = timeCalcConfiguration.getProperty(
|
||||||
|
key);
|
||||||
|
//System.out.println(key + "=" + value);
|
||||||
|
if (value != null && !value.isBlank()) {
|
||||||
|
urls.put(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stage == null) {
|
||||||
|
Thread thread = new Thread(WebBrowser::startBrowser);
|
||||||
|
thread.setDaemon(true);
|
||||||
|
thread.start();
|
||||||
|
} else {
|
||||||
|
Platform.runLater(() -> stage.show());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void startBrowser() {
|
||||||
|
launch(WebBrowser.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start(Stage primaryStage) {
|
||||||
|
primaryStage.setTitle("Web Browser");
|
||||||
|
|
||||||
|
WebView webView = new WebView();
|
||||||
|
|
||||||
|
webView.setContextMenuEnabled(true);
|
||||||
|
WebEngine engine = webView.getEngine();
|
||||||
|
engine.setOnError(event -> System.out.println(event.getMessage()));
|
||||||
|
engine.setOnAlert(event -> System.out.println(event.getData()));
|
||||||
|
|
||||||
|
// // local error console
|
||||||
|
// com.sun.javafx.webkit.WebConsoleListener.setDefaultListener(
|
||||||
|
// (webview, message, lineNumber, sourceId) -> System.out
|
||||||
|
// .println("Console: [" + sourceId + ":" + lineNumber + "] " + message));
|
||||||
|
//
|
||||||
|
// webView.getEngine().locationProperty().addListener(
|
||||||
|
// (observable, oldValue, newValue) -> System.out.println(newValue));
|
||||||
|
|
||||||
|
engine.load("https://pocasi.cz/praha");
|
||||||
|
|
||||||
|
VBox vBox = new VBox(webView);
|
||||||
|
|
||||||
|
Scene scene = new Scene(vBox, 1400, 800);
|
||||||
|
vBox.setMinHeight(800);
|
||||||
|
webView.setMinHeight(800);
|
||||||
|
|
||||||
|
scene.setOnKeyPressed(e -> {
|
||||||
|
if (e.getCode() == KeyCode.F5) {
|
||||||
|
engine.reload();
|
||||||
|
}
|
||||||
|
if (e.isControlDown() && e.getCode() == KeyCode.R) {
|
||||||
|
TextInputDialog dialog = new TextInputDialog();
|
||||||
|
dialog.setTitle("Run website");
|
||||||
|
Optional<String> result = dialog.showAndWait();
|
||||||
|
if (result.isPresent()) {
|
||||||
|
String value = result.get();
|
||||||
|
if (!value.startsWith("http")) {
|
||||||
|
value = "https://" + value;
|
||||||
|
System.out.println("Loading: " + value);
|
||||||
|
}
|
||||||
|
engine.load(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.isControlDown() && e.getCode() == KeyCode.S) {
|
||||||
|
Integer[] digits = new Integer[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
|
||||||
|
ChoiceDialog<Integer>
|
||||||
|
choiceDialog = new ChoiceDialog<>(digits[0], digits);
|
||||||
|
choiceDialog.showAndWait();
|
||||||
|
Integer selectedItem = choiceDialog.getSelectedItem();
|
||||||
|
if (selectedItem != null) {
|
||||||
|
String key = BROWSE + DIGIT + selectedItem;
|
||||||
|
String value = engine.getLocation();
|
||||||
|
timeCalcConfiguration.setProperty(key, value);
|
||||||
|
if (urls.containsKey(key)) {
|
||||||
|
urls.replace(key, value);
|
||||||
|
} else {
|
||||||
|
urls.put(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.isControlDown() && e.getCode() == KeyCode.W) {
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder("These urls are saved: ");
|
||||||
|
sb.append("\n");
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
for (String key : urls.keySet()) {
|
||||||
|
if (!key.contains(DIGIT)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String value = urls.get(key);
|
||||||
|
if (value == null || value.isBlank()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
list.add(key.replace(BROWSE, "").replace(DIGIT, "") + "="
|
||||||
|
+ value + "\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
Collections.sort(list);
|
||||||
|
for(String s :list) {
|
||||||
|
sb.append(s);
|
||||||
|
}
|
||||||
|
Utils.showNotification(sb.toString(), 30000, 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i <= 9; i++) {
|
||||||
|
if (!e.getCode().name().contains(DIGIT)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (e.getCode().name().equals(DIGIT + i)) {
|
||||||
|
String key = BROWSE + DIGIT + i;
|
||||||
|
if (urls.containsKey(key)) {
|
||||||
|
String value = urls.get(key);
|
||||||
|
if (value != null && !value.isBlank()) {
|
||||||
|
if (!value.startsWith("http")) {
|
||||||
|
value = "https://" + value;
|
||||||
|
}
|
||||||
|
engine.load(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
primaryStage.setScene(scene);
|
||||||
|
primaryStage.setTitle("Web Browser");
|
||||||
|
|
||||||
|
stage = primaryStage;
|
||||||
|
stage.show();
|
||||||
|
Platform.setImplicitExit(false);
|
||||||
|
stage.setOnCloseRequest(event -> stage.hide());
|
||||||
|
|
||||||
|
// Thread t = new Thread(() -> {
|
||||||
|
// while (true) {
|
||||||
|
// System.out.println("ahoj" + stage.isShowing());
|
||||||
|
// try {
|
||||||
|
// Thread.sleep(100);
|
||||||
|
// } catch (InterruptedException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// t.setDaemon(true);
|
||||||
|
// t.start();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
6
pom.xml
6
pom.xml
@ -10,9 +10,9 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<time-calc.version>0.1.0-SNAPSHOT</time-calc.version>
|
<time-calc.version>0.1.0-SNAPSHOT</time-calc.version>
|
||||||
<java.version>1.8</java.version>
|
<java.version>21</java.version>
|
||||||
<maven.compiler.source>8</maven.compiler.source>
|
<maven.compiler.source>21</maven.compiler.source>
|
||||||
<maven.compiler.target>8</maven.compiler.target>
|
<maven.compiler.target>21</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<lib.dir>${basedir}/lib</lib.dir>
|
<lib.dir>${basedir}/lib</lib.dir>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user