这是一种获取不同javafx控件文本的方法。
private String getText(Node item) {
String txt = "";
if (item instanceof Label) {
if(!((Label)item).getText().isEmpty()){
txt = ((Label)item).getText();
}
}
if (item instanceof TextField) {
if(!((TextField)item).getText().isEmpty()){
txt = ((TextField)item).getText();
}
}
if (item instanceof CheckBox) {
if(!((CheckBox)item).getText().isEmpty()){
txt = ((CheckBox)item).getText();
}
}
return txt;
}
我正试图减少代码行数。除了定义标签、文本字段、复选框等,是否有一个对象类可以调用所有其他控件并放在节点项旁边,这样我就不需要重复和指定每个控件?有没有办法做到这一点?
private String getText(Node item, X x) {
String txt = "";
if (item instanceof x) {
if(!((x)item).getText().isEmpty()){
txt = ((x)item).getText();
}
return txt;
}
我应该用什么替换x&x。我不知道应该调用或替换控件的对象。只是不介意isempty的逻辑。我主要关心的是应该调用或替换控件的对象。然后像这样调用该方法
getText(txtSample, TextField.class)
或
getText(lblSample, Label.class)
非常感谢。
1条答案
按热度按时间6l7fqoea1#
因为普通的超类控件没有方法
getText()
(因为并非所有控件都有文本),这是不可能的。编辑:正如詹姆斯·杜德所指出的,
Label
及CheckBox
是否有一个拥有该方法的共同祖先getText()
,即Labeled
. 这为我们节省了另一笔钱instanceof
检查。然而,其余的相似之处可以提取出来。假设我们首先编写一个helper方法来从控件中提取文本(注意与
instanceof
:然后,原始函数变为:
但请注意,您需要检查
text.isEmpty()
而您初始化变量时使用的默认值txt
它本身是空的(""
). 因此,不需要检查是否为空。你是说.isBlank()
(仅剥离空白字符串)?或getText() == null
?否则,它可以被删除,然后你的左功能
getRawText()
只有