JavaFX、线性查找动画

 

package algorithm;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Exercise22_16 extends Application {
    public static final int SIZE = 20;  //大小
    private ArrayList<Integer> randomValue = new ArrayList<>(SIZE); //数组列表-存放1~20的随机值
    private Rectangle[] rectangles = new Rectangle[SIZE];   //直方图

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Text text = new Text(); //顶部文本
        TextField key = new TextField();    //查找键值
        Button step = new Button("Step");   //查找按钮
        Button reset = new Button("Reset"); //重置按钮
        HBox hBox =  new HBox(10, new Label("Key (in double)"), key, step, reset);  //底部水平面板
        hBox.setAlignment(Pos.CENTER);  //居中对齐

        BorderPane pane = new BorderPane(getCenter());
        pane.setTop(text);
        pane.setBottom(hBox);
        BorderPane.setAlignment(pane.getTop(), Pos.CENTER);
        pane.setPadding(new Insets(5));

        step.setOnAction(event -> { //按钮注册动作事件
            try {
                if (randomValue.contains(Integer.parseInt(key.getText()))) {    //数组列表包含键值
                    int index = randomValue.indexOf(Integer.parseInt(key.getText()));   //获取下标
                    rectangles[index].setFill(Color.GREY);  //设置矩形填充
                    text.setText("The key is found in the array at index " + (SIZE - index - 1));   //设置文本
                } else  //数组列表不包含整数键值
                    text.setText("The key is not in the array");
            } catch (NumberFormatException ex) {
                //捕获非整数键值
                text.setText("The key is not in the array");
            }
            key.setEditable(false);
        });
        reset.setOnAction(event -> {
            pane.setCenter(getCenter());
            key.setEditable(true);
            key.setText("");
            text.setText("");
        });

        Scene scene = new Scene(pane, 480, 350);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Exercise22_16");
        primaryStage.show();
    }

    /** 返回中心面板 */
    private HBox getCenter() {
        if (randomValue.size() == 0) {  //数组列表大小为0时,赋初值
            for (int i = 0; i < SIZE; i++)
                randomValue.add(i + 1);
        }
        Collections.shuffle(randomValue);   //打乱数组列表

        HBox hBox = new HBox();
        hBox.setStyle("-fx-border-color: black; -fx-padding: 5px 10px 0;");
        for (int i = 0; i < SIZE; i++) {    //添加直方图
            rectangles[i] = new Rectangle();
            rectangles[i].setStyle("-fx-stroke: grey; -fx-fill: white;");
            rectangles[i].setWidth(21);
            rectangles[i].setHeight(randomValue.get(i) * 13);
            Label label = new Label(String.valueOf(randomValue.get(i)), rectangles[i]);
            label.setContentDisplay(ContentDisplay.BOTTOM);
            label.setRotate(180);
            hBox.getChildren().add(label);
        }
        hBox.setRotate(180);

        return hBox;
    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值