我正在开发JavaFX自定义按钮。像这样。
let sourceDateString = "12/20/2016 11:45 AM"
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yyyy hh:mm a"
formatter.timeZone = TimeZone(identifier: "UTC")
let date = formatter.date(from: sourceDateString)
print(date)
formatter.timeZone = NSTimeZone.local
formatter.dateFormat = "MMM dd,yyyy hh:mm a"
let strDate = formatter.string(from: date!)
print(strDate)
我想在FXML中使用此控件。但原始按钮和标签可以设置文本使用“测试:”像这样
public class MyButton extends Control{
private static final String DEFAULT_STYLE_CLASS = "satrec-button";
private Button button;
public MyButton(){
getStyleClass().setAll(DEFAULT_STYLE_CLASS);
}
@Override
public String getUserAgentStylesheet(){
return "sample/css/button.css";
}
public void setButton(Button button){
this.button = button;
}
public void setText(String text){
this.button.setText(text);
}
}
但<Button text="Search" textFill="white" prefWidth="130" GridPane.columnIndex="4" GridPane.rowIndex="1" styleClass="control" fx:id="search_btn" />
无法使用此功能。我查了MyControl
课。我知道Labeled
是text
。
但我不知道这是什么,我该怎么用。我该怎么办??求你帮帮我。
答案 0 :(得分:0)
您可以使用NamedArg
注释:
public MyButton(@NamedArg("text") String text) {
this();
this.setText(text);
}
否则fxml不知道你的意思是哪个构造函数。
现在可以按照你的要求在你的fxml中使用你的按钮:
<MyButton text="Search" ...
。
答案 1 :(得分:0)
实例FXML元素的属性或子属性元素的默认解释是它映射到实例中的JavaFX属性。 (基本上它依赖于使用JavaFX properties pattern的控件。)
换句话说,在您的FXML片段中:
<MyButton>
<text>
<String fx:value="Search" />
</text>
</MyButton>
或等同地
<MyButton>
FXMLLoader
是实例元素,它会导致MyButton
创建text
类的新实例,默认情况下调用默认构造函数。在任一版本中,FXMLLoader
(第一个版本中的属性,第二个版本中的属性元素)将导致textProperty()
查找WritableValue
方法,返回StringProperty
实例(例如setValue(...)
)。假设它找到一个,它会在WritableValue
上调用"Search"
,传入字符串MyButton
。 (有关所有这些术语的完整说明,请参阅FXML documentation。)
因此,您只需要textProperty()
课程来定义适当的public class MyButton extends Control{
private static final String DEFAULT_STYLE_CLASS = "satrec-button";
private Button button;
public MyButton(){
getStyleClass().setAll(DEFAULT_STYLE_CLASS);
}
@Override
public String getUserAgentStylesheet(){
return "sample/css/button.css";
}
public void setButton(Button button){
this.button = button;
}
public StringProperty textProperty() {
if (button == null) { // might be better to write the class so that this is never true?
button = new Button();
}
return button.textProperty();
}
public final void setText(String text) {
textProperty().set(text);
}
public final String getText() {
return textProperty().get();
}
}
方法。由于您希望将其作为所包含按钮的文本,因此您可以委派该按钮的方法:
CL_SALV_COLUMN