JavaFX点击New按钮替换旧文本:新文本叠加问题求助
点击按钮文本叠加不更新的解决办法
问题根源
你每次点New按钮时,都会新建一个Text对象并加到rootM容器里——之前创建的旧Text还在容器里没被移除,自然会叠加显示。你写的setText(null)只是清空当前刚创建的这个Text的内容,马上又设了新文本,根本没碰旧的Text,当然没用。
最优解决方案
把Text对象的创建移到按钮事件外面,只初始化一次,每次点击只更新它的文本内容:
// 初始化时创建一次Text,设置好布局和字体,添加到容器 Text mText = new Text(); mText.setLayoutX(300); mText.setLayoutY(200); mText.setFont(Font.font("Verdana", 50)); rootM.getChildren().add(mText); buttonNew.setOnAction(ae -> { int randomM1 = (int) (Math.random() * 11); int randomM2 = (int) (Math.random() * 11); System.out.println(randomM1 + " x " + randomM2); System.out.println(randomM1 * randomM2); // 直接更新已有Text的内容,无需新建对象 mText.setText(randomM1 + " x " + randomM2); });
备选方案(不推荐,效率低)
如果非要每次新建Text,那得先把容器里的旧Text删掉再添加新的:
buttonNew.setOnAction(ae -> { int randomM1 = (int) (Math.random() * 11); int randomM2 = (int) (Math.random() * 11); System.out.println(randomM1 + " x " + randomM2); System.out.println(randomM1 * randomM2); // 移除容器里所有Text类型的组件 rootM.getChildren().removeIf(node -> node instanceof Text); // 新建Text并添加到容器 Text mText = new Text(randomM1 + " x " + randomM2); mText.setLayoutX(300); mText.setLayoutY(200); mText.setFont(Font.font("Verdana", 50)); rootM.getChildren().add(mText); });
内容的提问来源于stack exchange,提问作者Juju
相关产品推荐
相关产品推荐

