当前位置: 首页 > 知识库问答 >
问题:

用TextField替换选定的标签

姜献
2023-03-14

我已经创建了标签ListView,使用:

ListView<Label> list = new ListView<Label>();
Image folder = new Image(getClass().getResourceAsStream("folder.png"));
ObservableList<Label> data = FXCollections.observableArrayList();   
for (int i = 0; i < 6; i++) {
    Label lbl = new Label();
    lbl.setText("label" + i);
    lbl.setGraphic(new ImageView(folder));
    lbl.setContentDisplay(ContentDisplay.LEFT); 
    lbl.setGraphicTextGap(10.2); 
    data.add(lbl);              
}
list.setItems(data);

我希望用户能够双击列表视图中的任何标签,选择的标签应该替换为textfield,以便用户可以动态地输入新的标签名称。

在用户按下Enter后,TextField应该会变成标签

共有1个答案

魏鸿禧
2023-03-14

不要使用标签作为列表视图的数据类型。使用字符串。然后,您可以使用标准的TextFieldListCell,它具有您所描述的功能。由于您希望在标准单元格中显示图形,只需子类TextFieldListCell并重写适当的方法,以便在不显示文本字段时包含图形:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.ListView;
import javafx.scene.control.cell.TextFieldListCell;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.StringConverter;
import javafx.util.converter.DefaultStringConverter;

public class EditableListViewTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        ListView<String> list = new ListView<>();
        Image testImg = new Rectangle(12, 12, Color.CORNFLOWERBLUE).snapshot(null, null);
        for (int i = 0; i < 6; i++) {
            list.getItems().add("label "+i);
        }

        StringConverter<String> identityStringConverter = new DefaultStringConverter();

        list.setCellFactory(lv -> new TextFieldListCell<String>(identityStringConverter) {

            private ImageView imageView = new ImageView(testImg);


            @Override
            public void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (! empty && ! isEditing()) {
                    setStaticGraphic();
                }
            }

            @Override
            public void cancelEdit() {
                super.cancelEdit();
                setStaticGraphic();
            }

            @Override
            public void commitEdit(String newValue) {
                super.commitEdit(newValue);
                setStaticGraphic();
            }

            private void setStaticGraphic() {
                setGraphic(imageView);
                setContentDisplay(ContentDisplay.LEFT);
                setGraphicTextGap(10.2);                
            }
        });

        list.setEditable(true);

        primaryStage.setScene(new Scene(new BorderPane(list), 250, 400));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 类似资料:
  • 我有一个字段,我在其中插入端口号。我想将字符串自动转换为数字:

  • 如何替换所有标签

  • 问题内容: 我想在Honeycomb ActionBar中添加一个不确定的进度条,以便用户每次按下“刷新”时,刷新图标都会临时变为不确定的进度条,直到任务完成。电子邮件应用程序已经做到了,但是我不知道如何做到。 有什么建议吗? 问题答案: 很难确切说明电子邮件应用程序是如何完成的,但是您可能想保持简单,只需用XML文件的ID 调用setIcon,然后使用Timer更改状态即可。

  • 这可能是一个很简单的问题,但我对jQuery不是很有经验。我试着谷歌这个问题,但我似乎找不到一个替代的功能,或者也许我做错了这一个。 因此,当我加载页面时,HTML基本上如下所示: 然后我使用一些jQuery来替换按钮的文本,例如用以下代码替换住宅销售和购买: 但是,一旦jQuery运行,它就会给出以下HTML并删除。有什么想法,我可以让它只是取代“住宅销售”和“住宅出租”部分,而不是整个事情?

  • 我在这里做错了什么: 我一直在 但这很好: 显然我想避免 没有也不行,我的jstl不知道

  • 这是我的密码 我想替换字体标签,并把span标签。在这将取代第一个字体标签但不是第二个标签