java - 如何使用 EventHandler 在舞台上加载图像?
问题描述
我有这段代码。我想添加图像。在这里,我有一个被分成九个矩形的交叉板。这是一个图像交叉板 |1|2|3| |4|5|6| |7|8|9|
我想加载另一个图像:X.png 或 O.png 如果我单击矩形,例如数字 1,将加载图像。如何在 JavaFx 中做到这一点?可能吗?
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.canvas.*;
import javafx.scene.web.*;
import javafx.scene.layout.*;
import javafx.scene.image.*;
import java.io.*;
import javafx.geometry.*;
import javafx.scene.Group;
public class background extends Application {
private class Tile extends StackPane {
private Text text = new Text();
public Tile() {
Rectangle border = new Rectangle(200, 200);
border.setFill(null);
border.setStroke(Color.BLACK);
text.setFill(Color.BLACK);
text.setFont(Font.font("Verdana", FontWeight.BOLD, 95));
setAlignment(Pos.CENTER);
getChildren().addAll(border, text);
}
private void drawX() {
text.setText("X");
}
private void drawO() {
text.setText("O");
}
}
private Parent createContent() {
Pane root = new Pane();
root.setPrefSize(600, 600);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
background.Tile tile = new background.Tile();
tile.setTranslateX(j * 200);
tile.setTranslateY(i * 200);
root.getChildren().add(tile);
}
}
return root;
}
// launch the application
public void start(Stage stage)
{
try {
// set title for the stage
stage.setTitle("creating Background");
// create a label
Label label = new Label("Name : ");
// create a text field
TextField textfield = new TextField();
// set preferred column count
textfield.setPrefColumnCount(10);
// create a button
Button button = new Button("OK");
// add the label, text field and button
HBox hbox = new HBox(label, textfield, button);
// set spacing
// hbox.setSpacing(10);
// set alignment for the HBox
/// hbox.setAlignment(Pos.CENTER);
// create a scene
Scene scene = new Scene(hbox, 600, 600);
// create a input stream
FileInputStream input = new FileInputStream("c:\\fill.png");
// create a image
Image image = new Image(input);
// create a background image
BackgroundImage backgroundimage = new BackgroundImage(image,
BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT,
BackgroundPosition.DEFAULT,
BackgroundSize.DEFAULT);
// create Background
Background background = new Background(backgroundimage);
// set background
hbox.setBackground(background);
// set the scene
stage.setScene(scene);
stage.show();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
// Main Method
public static void main(String args[])
{
// launch the application
launch(args);
}
}
解决方案
推荐阅读
- hadoop - 让多个 reduce 任务组装一个 HDFS 文件作为输出
- nginx - 如何使用 Varnish 和 Nginx 向 AWS 负载均衡器发出 HTTPS 请求?
- javascript - 为什么在读入 forEach 方法时映射的键值对会被反转?
- dart - 从 Dart 中的 catch 中解码响应
- java - 如何一次加载recyclerView中的所有项目?
- react-final-form - React-Final-Form:从 props 设置 initialValues,在 props 更改时重置表单状态
- apache-camel - 以编程方式检查 Camel 身体大小,Java 和 Camel
- mysql - 用户“root”和“pma”的 MySQL 访问被拒绝。(视窗)
- pandas - Pandas:检查值错误是否在区间内,错误信息:InvalidOperation: [
] - javascript - 如何在 React-Native 中创建新的 var 并让用户获得价值?