HTMLF элементы JavaFX

1

Как добавить новый HTMLTableRowElement в HTMLTableElement и HTMLLIElement в элемент HTMLUListElement?

Мне кажется, что я не могу просто что-то new чего я хочу, и везде нет метода getInstance().

Благодарю.

  • 0
    Я думаю, вам нужно пройти через JavaFx и Javascript, а также Javafx и HTML
  • 0
    Это внутри WebView ?
Теги:
javafx
webview

2 ответа

2
Лучший ответ

Вы можете использовать API org.w3c.dom (который является частью основных java-библиотек). Честно говоря, я нахожу этот API довольно уродливым в использовании, но тем не менее он выполняет эту работу.

Вот минимальный пример:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DynamicWebViewTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        WebView webView = new WebView();
        webView.getEngine().loadContent("<html><body><table border='1' id='table'>"+
                    "<tr><th>Name</th><th>Value</th></tr></table></body></html>");

        TextField nameTF = new TextField();
        TextField valueTF = new TextField();
        Button addRowButton = new Button("Add row");
        addRowButton.setOnAction(event -> {
           Document doc = webView.getEngine().getDocument();
           Element table = doc.getElementById("table");
           Element newRow = doc.createElement("tr");
           Element nameCell = doc.createElement("td");
           Element valueCell = doc.createElement("td");
           nameCell.appendChild(doc.createTextNode(nameTF.getText()));
           valueCell.appendChild(doc.createTextNode(valueTF.getText()));
           newRow.appendChild(nameCell);
           newRow.appendChild(valueCell);
           table.appendChild(newRow);

           nameTF.setText("");
           valueTF.setText("");
        });

        HBox controls = new HBox(5, nameTF, valueTF, addRowButton);
        controls.setAlignment(Pos.CENTER);
        controls.setPadding(new Insets(5));

        BorderPane root = new BorderPane(webView, null, null, controls, null);
        Scene scene = new Scene(root, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
1

Предположим, вы используете Java Fx Web View для добавления этих элементов, поэтому я бы рекомендовал создать целую страницу или просто добавить компоненты, которые вам нужны, с помощью javascript-вызовов, потому что веб-представление дает вам js-движок для выполнения js-методов. Я не уверен, поддерживает ли сценарий настройку в веб-представлении.

  • 0
    ХОРОШО. Я заставлю программу писать HTML-коды на лету вместо того, чтобы потом добавлять / удалять узлы. Я действительно надеюсь, что смогу динамически манипулировать этими Элементами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню