gpt4 book ai didi

java - javafx ListView 中带有自定义 ListCell 的幽灵项目

转载 作者:行者123 更新时间:2023-12-02 03:28:15 34 4
gpt4 key购买 nike

我尝试使用自定义 ListCell 在 ListView 中查看自定义对象。作为演示该问题的示例,我选择了 java.util.File。另外,出于演示目的,我在渲染时直接禁用 ListCell。这些项目是由线程模拟的外部进程添加的。一切看起来都不错,直到我应用 CSS 为禁用的 ListCell 着色。现在似乎有一些幽灵项目与创建它们的 ListCell 一起被禁用。

我该如何解决这个问题?

App.java

public class App extends Application
{
@Override
public void start( Stage primaryStage )
{
final ListView<File> listView = new ListView<>();
listView.setCellFactory( column -> {
return new ListCell<File>()
{
protected void updateItem( File item, boolean empty )
{
super.updateItem( item, empty );

if( item == null || empty )
{
setGraphic( null );
return;
}

setDisable( true );
setGraphic( new TextField( item.getName() ) );
}
};
});

new Thread( () -> {
for( int i=0 ; i<10 ; ++i )
{
try
{
Thread.sleep( 1000 );
}
catch( Exception e )
{
e.printStackTrace();
}
final int n = i;
Platform.runLater( () -> {
listView.getItems().add( new File( Character.toString( (char)( (int) 'a' + n ) ) ) );
});
}
}).start();

Scene scene = new Scene( listView );
scene.getStylesheets().add( "app.css" );

primaryStage.setScene( scene );
primaryStage.show();
}

@Override
public void stop() throws Exception
{
super.stop();
}

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

app.css

.list-cell:disabled {
-fx-background-color: #ddd;
}

最佳答案

您永远不会将 disable 属性设置回 false。您需要对空单元格执行此操作。 Cell 可能会发生以下情况:

  1. 一个项目被添加到单元格并且该单元格被禁用
  2. 该项目已从Cell 中删除,Cell 变为空,但仍处于禁用状态。

一般来说,当Cell变空时,添加项目时对Cell所做的任何更改都应该被撤消。

此外,您应该避免每次将新项目分配给 Cell 时重新创建 TextField

listView.setCellFactory(column -> {
return new ListCell<File>() {

private final TextField textField = new TextField();

protected void updateItem(File item, boolean empty) {
super.updateItem(item, empty);

if (item == null || empty) {
setDisable(false);
setGraphic(null);
} else {
setDisable(true);
textField.setText(item.getName());
setGraphic(textField);
}
}
};
});

关于java - javafx ListView 中带有自定义 ListCell 的幽灵项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38483552/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com