JavaFX组件未更新
我正在建造一个大厅,可以显示玩家的信息 这是我的大堂管理员:JavaFX组件未更新,java,javafx,kryonet,jfoenix,Java,Javafx,Kryonet,Jfoenix,我正在建造一个大厅,可以显示玩家的信息 这是我的大堂管理员: public class LobbyController{ @FXML public JFXTextArea chatArea; @FXML public JFXTextField chatField; public void displayChatMessage(String message){ chatArea.appendText(message); } @FXML
public class LobbyController{
@FXML public JFXTextArea chatArea;
@FXML public JFXTextField chatField;
public void displayChatMessage(String message){
chatArea.appendText(message);
}
@FXML
public void onEnter(){
Main.client.sendChatMessage(chatField.getText());
}
}
我从另一个类访问此控制器,如下所示:
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("/views/lobby.fxml"));
fxmlLoader.load();
LobbyController controller = fxmlLoader.getController();
if(!gameStarted){
controller.displayChatMessage(((Packets.ChatMessage) o).message);
}
我的控制器正在接收消息,就像我在displayChatMessage()
中放置了打印行一样,它正确地打印消息
我的问题是
appendText()
似乎根本没有更改文本。您没有显示从FXML文件加载的UI。调用controller.displayChatMessage()
时,您希望看到什么?我可以正确加载fxml文件,以便看到所有预期的内容displayChatMessage()
应该在已加载的文本区域中附加一个新字符串。你没有领会我的意思。您的lobb.fxml
文件定义了一个UI。该UI中有一个文本区域(可能还有其他内容)。调用fxmloader.load()
时,FXML加载程序将创建一个新的UI,包括一个新的文本区域,并返回对UI根目录的引用。您获得的控制器是该UI的控制器。由于您没有显示该UI(甚至没有将其指定给引用),因此您正在更新一个不显示在任何地方的文本区域。如果您已经加载了FXML文件并显示了它,那么您需要该UI的控制器,而不是您不显示的控制器。很抱歉,我很笨,我该怎么做?在某个时候,您可能会加载FXML并显示它。在这一点上,您需要获得控制器,就像您在问题中发布的代码中一样。然后安排在该控制器上调用displayChatMessage(…)
。