我想在Pane中添加带有图像的两个不同标签。我使用的代码是:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Controller extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Starting FX");
primaryStage.setScene(new Scene(new Panel(), 590, 390));
primaryStage.setResizable(false);
primaryStage.centerOnScreen();
primaryStage.show();
}
}
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
public class Panel extends Pane {
private ImageView image = new ImageView(new Image(getClass().getResourceAsStream("red.jpg")));
private Label label1 = new Label();
private Label label2 = new Label();
public Panel() {
label1.relocate(524, 280);
label1.setGraphic(image);
this.getChildren().add(label1);
label2.relocate(250, 200);
label2.setGraphic(image);
this.getChildren().add(label2);
}
}
我的问题是它不会在屏幕上添加两个标签。
如果我有:
this.getChildren().add(label1);
this.getChildren().add(label2);
它只在屏幕上显示标签2,即使我打印(this.getchildren())它也有两个标签。
如果我有其中一个,它会正常添加。
即使我没有,也执行
this.getChildren().addAll(label1, label2);
仍然只添加label2。
为什么?
谢谢
答案 0 :(得分:4)
两个标签实际上都存在,但它们不能在场景图中使用相同的ImageView。如果您向标签添加文本,您应该看到它们。您必须创建两个单独的ImageView实例,每个实例对应一个标签。试试这个。
public class Panel extends Pane
{
Image labelImage = new Image(getClass().getResourceAsStream("red.jpg"));
private Label label1 = new Label();
private Label label2 = new Label();
public Panel()
{
label1.relocate(524, 280);
label1.setGraphic(new ImageView(labelImage));
this.getChildren().add(label1);
label2.relocate(250, 200);
label2.setGraphic(new ImageView(labelImage));
this.getChildren().add(label2);
}
}
查看此帖子了解详情 Reusing same ImageView multiple times in the same scene on JavaFX
答案 1 :(得分:0)
这是因为ImageView是一个节点,它在Scenegraph中不能两次。添加第二个ImageView并将其添加到第二个标签。
private ImageView image1 = new ImageView(new Image(getClass().getResourceAsStream("red.jpg")));