我需要在窗格上有一个选择监听器和选择方法,以便在单击节点时能够监视并显示突出显示。
我做了以下操作:
public class PaneWithSelectionListener extends Pane {
private ObjectProperty<Annotation> selectedAnnotation = new SimpleObjectProperty<>();
public PaneWithSelectionListener() {
super();
selectedAnnotation.addListener((obs, oldAnno, newAnno) -> {
if (oldAnno != null) {
oldAnno.setStyle("");
}
if (newAnno != null) {
newAnno.setStyle("-fx-border-color: blue;-fx-border-insets: 5;-fx-border-width: 1;-fx-border-style: dashed;");
}
});
setOnMouseClicked(e->selectAnnotation(null));
}
public void selectAnnotation(Annotation ann){
selectedAnnotation.set(ann);
}
}
这工作得很好 - 但是我无法再使用场景构建器,因为我的FXML引用了此窗格与选择监视器
而不是窗格
。我不确定如何将我的自定义窗格放入场景构建器。我已经看过其他问题,它们都是FXML和控制器的组合 - 这只是一个窗格
。
有没有人知道这样做的方法,或者在初始化时将< code>Pane换成< code > PaneWithSelectionListener ?
谢谢
我创建了一个CustomCB组合框,它的类型是userObject。在我的案例中,我使用了<code>
当然,您有一个测试器CustomCB2,它也可以使用FXML而不是我所做的方式。
我实际上希望以我在组合框中键入的文本开头的项目出现在列表中。但是我不知道怎么做。因为PERSON类的FIRST NAME或LAST NAME可以以“Pe”开头。如果我找到解决办法,我会在这里发布。
这是自定义组件。
package customCB;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
/**
*
* @author Hornigold Arthur
*/
public class APerson {
private final StringProperty firstName;
private final StringProperty lastName;
private final IntegerProperty familyID;
private final IntegerProperty personID;
public APerson() {
this(null, null, 0,0);
}
/**
* Constructor with some initial data.
*
* @param familyID
* @param familyName
*/
public APerson (String firstName, String lastName, int familyID, int personID) {
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
this.familyID = new SimpleIntegerProperty(familyID);
this.personID = new SimpleIntegerProperty(personID);
}
public int getFamilyID() {
return familyID.get();
}
public void setFamilyID(int FamilyID) {
this.familyID.set(FamilyID);
}
public IntegerProperty familyIDProperty() {
return familyID;
}
public int getPersonID() {
return personID.get();
}
public void setPersonID(int PersonID) {
this.personID.set(PersonID);
}
public IntegerProperty personIDProperty() {
return personID;
}
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String FirstName) {
this.firstName.set(FirstName);
}
public StringProperty firstNameProperty() {
return firstName;
}
public String getLastName() {
return lastName.get();
}
public void setLastName(String LastName) {
this.lastName.set(LastName);
}
public StringProperty lastNameProperty() {
return lastName;
}
public String toString() {
String name = getFirstName() + " " + getLastName()+ " [" + getFamilyID() +"]";
return name;
}
}
这是自定义组件的 FXML。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.layout.VBox?>
<fx:root stylesheets="@application.css" type="javafx.scene.layout.VBox" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1">
<ComboBox fx:id="myCustomCombo" editable="true" onAction="#cbOnAction" prefWidth="300.0" style="-fx-background-color: white;" />
</fx:root>
这是此 FXML 的控制器,但不要在 FXML 文件中提及它。它会引发错误。
package customCB;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import org.controlsfx.control.textfield.TextFields;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
public class CustomComboController extends VBox{
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private ComboBox<APerson> myCustomCombo;
@FXML
void cbOnAction(ActionEvent event) {
}
@FXML
void initialize() {
assert myCustomCombo != null : "fx:id=\"myCustomCombo\" was not injected: check your FXML file 'CustomLvFXML.fxml'.";
}
public CustomComboController() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("customCombo.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
public void setCBValues(javafx.collections.ObservableList<APerson> values) {
myCustomCombo.setItems(values);
myCustomCombo.setEditable(true);
TextFields.bindAutoCompletion(myCustomCombo.getEditor(), myCustomCombo.getItems());
}
}
从WEB下载controlsfx-8.40.12.jar,并将其作为库包含在BUILD PATH中。
现在为这个项目创建一个jar文件。“CustomCB.jar”。
该JAR文件必须作为自定义控件包含在Scene Builder中。我用的是10.0版本。
现在它是场景生成器的一部分,您可以在设计中使用此组件,除非您可以像我在TEST代码中所做的那样完成它。您需要包含“CustomCB.jar”作为构建库的一部分。
这是测试人员的代码。
package customCB2;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
public class Main extends Application {
static private javafx.collections.ObservableList<APerson> fathers = javafx.collections.FXCollections.observableArrayList();
static private javafx.collections.ObservableList<APerson> mothers = javafx.collections.FXCollections.observableArrayList();
@Override
public void start(Stage stage) throws Exception {
CustomComboController customControl2 = new CustomComboController();
CustomComboController customControl3 = new CustomComboController();
loadFathers();
loadMothers();
customControl2.setCBValues(fathers);
customControl3.setCBValues(mothers);
VBox root = new VBox();
root.getChildren().addAll(customControl2, customControl3);
stage.setScene(new Scene(root));
stage.setTitle("Custom Control Combo box");
stage.setWidth(300);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
private void loadFathers() {
fathers.clear();
fathers.add(new APerson("Hornigold","Arthur",1,63));
fathers.add(new APerson("Andrews","Sundareson",2,60));
fathers.add(new APerson("Christopher","Easweradoss",3,57));
fathers.add(new APerson("Arthur","Kennedy",4,55));
}
private void loadMothers() {
mothers.clear();
mothers.add(new APerson("Victoria","Arthur",1,95));
mothers.add(new APerson("Eliza", "Daniel",1,60));
mothers.add(new APerson("Nesammal", "Rivington",2,57));
mothers.add(new APerson("Ratnammal","Andews",1,55));
}
}
它需要很多改进。如果有人能即兴表演,请在这里加上。
如果问题只是为了让自定义类在SceneBuilder中可用,可以通过以下步骤实现:
Annotation
)绑定为jar文件PaneWithSelectionListener
)中需要访问的类PaneWithSelectionListener
现在将出现在SceneBuilder中左侧窗格中的“自定义”下:您会注意到SceneBuilder中的下拉菜单有一个“自定义库文件夹”选项,您可以从中打开存储jar文件的文件夹。对于一个快速选项,您只需将jar文件复制到此文件夹,然后(在短暂延迟后),包含的类将出现在“自定义”列表中。
我正在使用wordpress 4.1与ACF v4。我有一个添加了自定义字段的自定义帖子类型,每次添加新类别时都需要添加新的自定义字段。如果我自动添加类别“轿车”,我必须添加自定义字段“轿车”。我可以使用插件函数执行此操作吗?或者我必须用代码,在数据库中插入来做到这一点?提前致谢!!
问题内容: 我已经构建了自己的自定义react-bootstrap Popover组件: 该组件的呈现方式如下: 现在,我想向组件中添加自定义道具,例如:我的文字,并使用新道具在弹出框中设置一些内容,例如- 但随后我在浏览器中收到此警告: 警告:标签上的未知道具。从元素中删除这些道具。 现在,我想我可以删除零件并逐个插入所有原始道具,而无需自定义道具,但是这样我就失去了“淡入淡出”效果,这也是处理
搜索很好,它在工作,我正在过滤的交易类型(出售或出租)和房间数量在每个房地产。 但是我的JSON响应缺少很多字段,包括ACF。例如:{ “id”:149,“post_author”:“2”,“post_date”:“2016-03-03 23:53:39”,“post_date_gmt”:“2016-03-03 23:53:39”,“post_content”:“”post_title“:”opo
如何向后端的joomla组件添加更多选项卡和字段, -尝试编辑视图xml文件添加更多的字段集,没有成功-尝试编辑视图管理组件中的编辑文件,没有成功, 有什么帮助吗?
我有一个自定义验证属性 假设我有一个实现ValidationAttory的HelloWorld类。然后我将此属性应用于我的API中的一个字段。 当我生成Swagger UI时,我得到一个JSON OpenAPI规范,模型显示每个字段的属性,如下所示: 如果我添加了一个必需的标记,如果我使用诸如RegularExpression/Range/StringLength之类的属性,则会显示一个星号,文本
我正在尝试在我的网站实现一个lightbox。我遵循了这个教程,它工作很好。但是,我希望lightbox包含HTML代码(如标记)。本教程显示的方式迫使用户在框中内联地编写您想要的内容 。 如何让它从另一个文件中读取?或者在框中使用HTML的最佳方式是什么?我不希望所有的东西都在一条线上。 http://jsfiddle.net/ytjad/ 谢谢!