【发布时间】:2018-02-05 19:48:05
【问题描述】:
我已尝试从此处遵循解决方案,但没有成功:JavaFX Change label text from another class with controller
我不确定他们是否想要和我一样。
所以基本上我拥有的是:FXMLDocumentController.java、FXMLDocument.xml, Operations.java 和 Main.java。 (我还有一些其他的类可以建立 Arduino 连接)
这是我在Main.java 中的启动方法:
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
primaryStage.setTitle("This is the title");
primaryStage.setScene(scene);
primaryStage.show();
}
编辑: 这是我的 Operations.java:
public class Operations {
private String mensagem, hora, dados;
private String [] msgSeparada, dadosSeparados;
private int origem, destino, tipoMensagem, comprimento;
private int [] estadoDosSensores;
public FiltrarMensagem(String mensagem) {
//remove o primeiro e ultimo carater
mensagem = mensagem.substring(1, mensagem.length()-2);
this.mensagem = mensagem;
System.out.printf("Mensagem Recebida: %s\n", mensagem);
msgSeparada = this.mensagem.split(";");
destino = Integer.valueOf(msgSeparada[0]);
origem = Integer.valueOf(msgSeparada[1]);
hora = msgSeparada[2];
tipoMensagem = Integer.valueOf(msgSeparada[3]);
comprimento = Integer.valueOf(msgSeparada[4]);
dados = msgSeparada[5];
dadosSeparados = dados.split(",");
}
public void imprimir() {
System.out.printf("Origem: %d\n", origem);
System.out.printf("Destino: %d\n", destino);
System.out.printf("Hora: %s\n", hora);
System.out.printf("Tipo de Mensagem: %d\n", tipoMensagem);
System.out.printf("Comprimento: %d\n", comprimento);
System.out.printf("Dados: %s\n\n", dados);
if(Integer.valueOf(dadosSeparados[0]) == 1) {
//change label value here
}
}
}
为简化起见,这是我的程序的作用:
我的控制器类有 2 个简单的按钮,这些按钮从 Arduino 的串行端口接收数据,并使用从 Arduino 接收的数据,我创建了操作类的对象,以便我可以根据需要进行必要的更改从 Arduino 接收到的数据,我想做的是更改标签和 FXML 文件中可用的所有对象,但我无法做到这一点。最简单的方法是什么?
我已经尝试了一切,但没有成功...如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
您尚未向我们展示您尝试从
Operations类更改控制器中的某些内容。没有看到就不可能知道你做错了什么,因此实际上不可能回答你的问题(你已经发布了一个可能的解决方案的链接 - 该解决方案有什么问题?)。 -
我没有尝试该解决方案,因为我无法理解他们的问题,而且我认为这与我的不同。这就是为什么我要问我该怎么做......不过我已经添加了代码。
-
也许我应该在之前的评论中更加小心。更新并没有太大帮助。实际上,我们需要更多信息和上下文,但可能没有那么多与问题无关的代码。是否可以制作一个显示问题的minimal reproducible example?你有一个带有标签的 FXML,它有一个控制器;然后你有另一个object,你想做一些导致标签更新的事情。我们不知道您在哪里实例化该对象,或者它是在哪里创建的,与 FXML 的加载位置有关。这就是您的示例代码需要展示的内容
-
对不起,你是对的。是的,基本上我们可以假设我只有 4 个文件/类:主类,它基本上只加载 FXML 文件,FXML 文件本身,Controller 类和与这些类无关的其他类(操作) ,它只是从 arduino 接收消息并过滤数据,所以我可以在我的可视界面中显示它。这就是为什么我要更改此操作类的标签。
-
可能您需要做的是创建一个模型类,并与您的控制器和其他将执行您操作的对象共享它的单个实例想要使标签更改其文本。您的模型可以有一个
StringProperty,并且控制器可以将标签的文本绑定到它;那么您的其他对象可以更新该StringProperty。请参阅我对stackoverflow.com/questions/32342864/applying-mvc-with-javafx 的回答(它有多个控制器与单个模型实例交互,而不是控制器和另一个对象)。