为了账号安全,请及时绑定邮箱和手机立即绑定

JavaFX:如何在用户输入上动态添加文本字段和按钮

JavaFX:如何在用户输入上动态添加文本字段和按钮

芜湖不芜 2023-04-26 16:41:21
我对 Java 有点陌生,我正在尝试在 JavaFX 中创建一个用户界面,每当用户按下“+”按钮时,它就会动态添加一个 TextField 和一个“编辑”按钮。我知道尝试将这些按钮和文本字段存储在列表中是个好主意,但我不确定如何将它们放在界面上ListView<Button> dinamicButtons = new ListView<Button>();ListView<TextField> dinamicTextFields = new ListView<TextField>();int quantityOfDinamicFieldsAdded =0; Button add= new Button ("+");        add.setOnAction(e -> {            dinamicButtons .add(quantityOfDinamicFieldsAdded , new Button("Edit"));            dinamicTextFields .add(quantityOfDinamicFieldsAdded , new TextField("nome do Componente"));            quantityOfDinamicFieldsAdded ++;            //remove dynamically added buttons and text fields            for (int i=0 ; i<quantityOfDinamicFieldsAdded ; i++){                //add them all back            }        });
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

这是一个将Buttonand添加TextField到ListView. 只是POJO跟踪提示TextField's文本和Button's文本。关键是使用CellFactory.


import java.util.concurrent.atomic.AtomicInteger;

import javafx.application.Application;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.ListCell;

import javafx.scene.control.ListView;

import javafx.scene.control.TextField;

import javafx.scene.layout.HBox;

import javafx.scene.layout.Priority;

import javafx.scene.layout.VBox;

import javafx.stage.Stage;


/**

 *

 * @author blj0011

 */

public class JavaFXTestingGround extends Application{


    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        launch(args);

    }


    @Override

    public void start(Stage stage) throws Exception {

        ListView<CellData> listView = new ListView();

        listView.setCellFactory((ListView<CellData> param) -> {

            ListCell<CellData> cell = new ListCell<CellData>() {

                TextField textField = new TextField();

                Button button = new Button();

                HBox hBox = new HBox(textField, button);

                {

                    HBox.setHgrow(textField, Priority.ALWAYS);

                }


                @Override

                protected void updateItem(CellData item, boolean empty) {

                    super.updateItem(item, empty);

                    if (item != null) {

                        textField.setPromptText(item.getTextFieldPromptText());

                        button.setText(item.getButtonText());

                        button.setOnAction((actionEvent) -> {

                            System.out.println("You clicked " + button.getText() + ". TextField Prompt text is " + textField.getPromptText() + ".");

                        });


                        setGraphic(hBox);

                    } else {

                        setGraphic(null);

                    }

                }

            };

            return cell;

        });        


        AtomicInteger i = new AtomicInteger(1);        

        Button button = new Button("Add Item");

        button.setOnAction((event) -> {

            listView.getItems().add(new CellData("Prompt Text: " + i.get(), "Button: " + i.getAndIncrement()));

        });


        VBox root = new VBox(button, listView);

        stage.setScene(new Scene(root));

        stage.show();

    }    

}

//img1.sycdn.imooc.com//6448e3d10001a6fb02490456.jpg

查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信