Javafx 更可重用,可以在一页上单击和更改 30 个标签的文本

Javafx more reusable to click and change text of 30 labels on one page

所以我正在构建一个应用程序,其中我通过 fxml 文件中的 pdf 文档将整个页面上的阿拉伯文文本添加为​​图像,并且我正在添加标签,以便一旦我向右滑动我就会看到英语翻译,当我向左滑动时,我看到阿拉伯语。 我知道会有超过 800 页的阿拉伯文字和双倍数量的标签, 您会推荐一种更可重用的方法来实现这一目标吗?

我的代码适用于我添加的 10 个标签,我希望更改文本:

主要是 - 我希望样式和字体保持一致,唯一会改变的是文本。

即使使用下面的代码,当我 运行 它我看到一旦你点击一次所有标签都以英文显示所以即使对于这个我也需要添加单独的方法。 .. 但我希望有人能帮助我并推荐一种使用一种方法的解决方案,该方法可完全重复用于一页中的所有 10 个标签。 如果我们必须更改任何内容,我们可以在那个本地化位置进行更改。

我是开发新手,我是一名自动化 Selenium 工程师,所以我从测试的角度理解可重用性,但我是开发新手。

请帮忙。

谢谢

      @FXML
void changeTexttoEnglish(String setstyle, String setText, String setFont) {
    invisiblelabelpg2header.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2header.setText("In the name of ALLAH, the Lord of Mercy, the Giver of Mercy!");
    invisiblelabelpg2header.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));


    invisiblelabelpg2label1.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label1.setText("All praise is for Allah, Lord of all worlds");
    invisiblelabelpg2label1.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label2.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label2.setText("The Most Compassionate");
    invisiblelabelpg2label2.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label3.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label3.setText("The Most Merciful");
    invisiblelabelpg2label3.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label4.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label4.setText("Master of the Day of Judgement");
    invisiblelabelpg2label4.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label5.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label5.setText("We only worship You and only ask You for help");
    invisiblelabelpg2label5.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label6.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label6.setText("Guide as along the Straight Path");
    invisiblelabelpg2label6.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label7.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label7.setText("The Path");
    invisiblelabelpg2label7.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label8.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label8.setText("of those you have blessed");
    invisiblelabelpg2label8.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label9.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label9.setText("Not those");
    invisiblelabelpg2label9.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

    invisiblelabelpg2label10.setStyle("-fx-background-color: linear-gradient(#86C1B9, #7CAFC2); -fx-background-: 40;");
    invisiblelabelpg2label10.setText("You are displeased with or those who are astray");
    invisiblelabelpg2label10.setFont(Font.font("Comic Sans", FontWeight.BOLD, 10));

}

@FXML
private void changeTexttoArabic() {
    invisiblelabelpg2header.setText(null);
    invisiblelabelpg2header.setStyle(null);

    invisiblelabelpg2label1.setText(null);
    invisiblelabelpg2label1.setStyle(null);

    invisiblelabelpg2label2.setText(null);
    invisiblelabelpg2label2.setStyle(null);

    invisiblelabelpg2label3.setText(null);
    invisiblelabelpg2label3.setStyle(null);

    invisiblelabelpg2label4.setText(null);
    invisiblelabelpg2label4.setStyle(null);

    invisiblelabelpg2label5.setText(null);
    invisiblelabelpg2label5.setStyle(null);

    invisiblelabelpg2label6.setText(null);
    invisiblelabelpg2label6.setStyle(null);

    invisiblelabelpg2label7.setText(null);
    invisiblelabelpg2label7.setStyle(null);

    invisiblelabelpg2label8.setText(null);
    invisiblelabelpg2label8.setStyle(null);

    invisiblelabelpg2label9.setText(null);
    invisiblelabelpg2label9.setStyle(null);

    invisiblelabelpg2label10.setText(null);
    invisiblelabelpg2label10.setStyle(null);


}

}

代码太少,无法真正解决您的问题。根据我对你的问题的理解,有两种方法:

1) 您可以使用一种方法,构造具有样式等的标签。您可以使用循环来创建标签 - 或者设置它们的样式 - 并且您可以将它们存储在数组或列表中。

对于此解决方案,我建议将字体和样式保存在 class 变量(字段)中,如您所说,它们不会改变。然后该方法将是这样的来创建 Labels

Label createLabel(String text) {
    Label lbl = new Label(text);
    lbl.setStyle...
    ....
    return lbl;
}

Label[] labels = new Label[10];
for (int i = 0; i < labels.size; i++)
    labels[i] = createLabel(getTextFromSomewhere());

然后您可以遍历数组(或列表)来更改文本。您还可以创建简单的方法来完成您需要对所有标签执行的操作,并在简单的 for 或 for-each 循环中调用这些方法。

2) 当您使用某种样式时,您可以子 class 标签,然后可以使用 css sheet 来设置标签的样式。因此您将不再需要所有样式代码。由于您总是有一组标签需要执行相同的操作,因此请执行 1) 来处理该组(数组、列表...)