У меня нет конкретного файла FXML, который я хочу, чтобы SceneBuilder отображал правильно, я просто хотите импортировать этот пользовательский компонент (с именем CustomComponent) в SceneBuilder.
Вот все файлы моего проекта. (Примечание. Идентификатор артефакта этого проекта — пользовательский компонент)
src/main/java/com/remmymilkyway/customcomComponent/CustomComponent.java
Код: Выделить всё
package com.remmymilkyway.customcomponent;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import java.net.URL;
public class CustomComponent extends Region {
private final WebView webView;
private final WebEngine webEngine;
public CustomComponent() {
this.webView = new WebView();
this.webEngine = webView.getEngine();
URL url = getClass().getResource("/monaco_editor.html");
if (url != null) {
webEngine.load(url.toExternalForm());
}
this.getChildren().add(webView);
}
public String getEditorContent() {
return (String) webEngine.executeScript("getEditorValue()");
}
public void setEditorContent(String newValue) {
String escapedContent = newValue.replace("'", "\\'").replace("\n", "\\n");
webEngine.executeScript("setEditorValue('" + escapedContent + "');");
}
public void setFontFamily(String fontFamily) {
webEngine.executeScript("setFontFamily('" + fontFamily + "');");
}
public void setFontSize(int fontSize) {
webEngine.executeScript("setFontSize(" + fontSize + ");");
}
public void setLanguage(String languageIdentifier) {
webEngine.executeScript("setLanguage('" + languageIdentifier + "');");
}
@Override
protected void layoutChildren() {
webView.setPrefSize(getWidth(), getHeight());
webView.resize(getWidth(), getHeight());
}
}
Код: Выделить всё
Monaco Editor in JavaFX
body, html {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
}
#container {
height: 100%;
width: 100%;
}
require.config({ paths: { 'vs': 'monaco-editor/min/vs' }});
require(['vs/editor/editor.main'], function () {
var editor = monaco.editor.create(document.getElementById('container'), {
language: 'cpp',
automaticLayout: true
});
window.getEditorValue = function () {
return editor.getValue();
}
window.setEditorValue = function (newValue) {
editor.setValue(newValue);
}
window.setFontFamily = function(fontFamily) {
editor.updateOptions({
fontFamily: fontFamily
});
};
window.setFontSize = function(fontSize) {
editor.updateOptions({
fontSize: fontSize
});
};
window.setLanguage = function(language) {
monaco.editor.setModelLanguage(editor.getModel(), language);
};
});
Код: Выделить всё
4.0.0
com.remmymilkyway
custom-component
1.0-SNAPSHOT
custom-component
UTF-8
5.10.2
org.openjfx
javafx-controls
22.0.1
org.openjfx
javafx-fxml
22.0.1
org.openjfx
javafx-web
22.0.1
org.junit.jupiter
junit-jupiter-api
${junit.version}
test
org.junit.jupiter
junit-jupiter-engine
${junit.version}
test
org.apache.maven.plugins
maven-compiler-plugin
3.13.0
22
22
org.openjfx
javafx-maven-plugin
0.0.8
default-cli
com.remmymilkyway.customcomponent/com.remmymilkyway.customcomponent.HelloApplication
app
app
app
true
true
true
Я выполнил команду mvn install и попытался импортировать проект в SceneBuilder, нажав кнопку Добавить библиотеку из репозитория вручную и импортировав версию 1.0-SNAPSHOT. Как показано на этом рисунке:

И у меня появился пустой выбор, когда я нажал кнопку ДОБАВИТЬ JAR.

Подробнее здесь: https://stackoverflow.com/questions/790 ... tion-blank
Мобильная версия