Как в Javafx сделать при выборе элемента listView переход по ссылке в браузер?

Рейтинг: 0Ответов: 1Опубликовано: 10.02.2023

Есть список, загружаемый из базы данные. Список состоит из сокращенных ссылок-"ключей", при нажатии на которые пользователь должен переходить по реальным ссылкам, заключенным в "значениях". Не могу найти информации, как в javafx осуществляется именно переход в браузер и строка работает как ссылка...? Подскажите, кто знает, пожалуйста :) Код контроллера прилагаю.

package com.example.diplom_fx2;

import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;

public class LinkController {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Button btn_add;

    ObservableList<String> short_links = FXCollections.observableArrayList();
    @FXML
    private ListView<String> listLink = new ListView<String>();

    @FXML
    private TextField long_link;

    @FXML
    private TextField short_link;

    private final DB db = new DB();
    Map<String, String> links = new HashMap<>();
    ArrayList<String> arrayLink = new ArrayList<>();


    @FXML
    void initialize() throws SQLException, IOException {
        btn_add.setOnAction(event -> {
            addLinks();

        });
    }

    private void addLinks() {
        String longLink = long_link.getCharacters().toString();
        String shortLink = short_link.getCharacters().toString();

        long_link.setStyle("-fx-border-color: #fafafa");
        short_link.setStyle("-fx-border-color: #fafafa");

        if(longLink.length() <= 4 || !longLink.contains(".")){
            long_link.setStyle("-fx-border-color: #e06249");

        }
        else if (shortLink.length() <= 2 ){
            short_link.setStyle("-fx-border-color: #e06249");
//        else if (db.isExistsUser(login)) {
//            btn_add.setText("Введите другой логин");
        } else {
            db.addLink(longLink, shortLink);
            links.put(shortLink, longLink);
            if(!short_link.getText().isEmpty() && !long_link.getText().isEmpty()){
                listLink.getItems().clear();
                for(Map.Entry<String, String> entry : links.entrySet()) {
                    String short_link = entry.getKey();
                    String long_link = entry.getValue();

                    arrayLink.add(short_link);

                    listLink.getItems().addAll(short_link);
                }
            }
            long_link.setText("");
            short_link.setText("");
            btn_add.setText("Всё готово :)");

            listLink.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
                @Override
                public void changed(ObservableValue<? extends String> observableValue, String s, String t1) {
                    // Вот сюда нужно,я так понимаю, написать код для перехода по ссылке в браузер через получаемое значение. Будет какой-то метод с переходом по условию ("http://" + longLink)
                }
            });

        }
    }
   }
}

Ответы

▲ 0Принят

Воспользуйтесь java.awt.Desktop

java.awt.Desktop.getDesktop().browse(new Uri("http://" + longLink)