Java ListView cellfactory:字体大小错误

Java ListView cellfactory:字体大小错误,java,listview,javafx,javafx-2,javafx-8,Java,Listview,Javafx,Javafx 2,Javafx 8,我有一个ListView cellfactory,它应该用粗体的字符串“GHI”绘制所有项目。问题是,甚至其他(随机)单元格也用粗体表示 我的代码: static class CellFactory extends ListCell<String> { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty);

我有一个ListView cellfactory,它应该用粗体的字符串“GHI”绘制所有项目。问题是,甚至其他(随机)单元格也用粗体表示

我的代码:

static class CellFactory extends ListCell<String> {

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);

        if (!empty) {

            super.setTextFill(Color.BLACK); // set TextColor Black

            if (item != null && item.equals("GHI")) {
                super.setStyle("-fx-font-weight: bold");    //(1)
            }

        }       

        super.setText(item);

    }
}
静态类CellFactory扩展了ListCell{
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
如果(!空){
super.setTextFill(Color.BLACK);//将TextColor设置为黑色
if(item!=null&&item.equals(“GHI”)){
super.setStyle(“-fx字体重量:粗体”);/(1)
}
}       
super.setText(项目);
}
}
使用调试器,第(1)行仅在项具有文本“GHI”时执行

以下是问题的图片:


我在JavaFX2.2.55-b13中使用了Java1.7.0_5532位,在JavaFX8.0.5-b13中使用了Java1.8.0_0532位。OS:Win7

问题是,当您在单元格中找到字符串时,您会更改单元格的样式。但如果不是,则不会将单元格的样式更改回正常字体

看看我在下面发布的代码。如果您注释掉标有(2)的行,您将看到,该单元格始终保持肥胖

package application;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());


            ListView<String> lv = new ListView<>();
            lv.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
            @Override 
            public ListCell<String> call(ListView<String> list) {
            return new CellFactory();
              }
            });

            ObservableList<String> items = FXCollections.observableArrayList();
            items.add("asd");
            items.add("fhg");
            items.add("GHI");
            items.add("tead");
            items.add("hoid");

            lv.setItems(items);

            root.setCenter(lv);

            Button btnAdd = new Button("add item");
            btnAdd.setOnMouseClicked(new EventHandler<Event>() {

                @Override
                public void handle(Event event) {
                    items.add(1, "test");
                }
            });

            root.setLeft(btnAdd);

            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

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


    static class CellFactory extends ListCell<String> {

      @Override
      public void updateItem(String item, boolean empty) {
          super.updateItem(item, empty);

          if (!empty) {

              super.setTextFill(Color.BLACK); // set TextColor Black

              if (item != null && item.equals("GHI")) {
                  super.setStyle("-fx-font-weight: bold");    //(1)
              }
          }     
          else{
                super.setStyle("-fx-font-weight: normal");    //(2)
          }


          super.setText(item);

      }

    }
}
包应用;
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.event.event;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ListCell;
导入javafx.scene.control.ListView;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.paint.Color;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类主扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
试一试{
BorderPane根=新的BorderPane();
场景=新场景(根,400400);
scene.getStylesheets().add(getClass().getResource(“application.css”).toExternalForm());
ListView lv=新建ListView();
lv.setCellFactory(新回调(){
@凌驾
公共ListCell调用(ListView列表){
返回新的CellFactory();
}
});
ObservableList items=FXCollections.observableArrayList();
项目。添加(“asd”);
项目。添加(“fhg”);
项目。添加(“GHI”);
项目。添加(“tead”);
项目。添加(“hoid”);
lv.设置项目(项目);
根。设置中心(lv);
按钮btnAdd=新按钮(“添加项目”);
setOnMouseClicked(新的EventHandler(){
@凌驾
公共无效句柄(事件){
增加(1,“试验”);
}
});
根。设置左(btnAdd);
初级阶段。场景(场景);
primaryStage.show();
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args){
发射(args);
}
静态类CellFactory扩展了ListCell{
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
如果(!空){
super.setTextFill(Color.BLACK);//将TextColor设置为黑色
if(item!=null&&item.equals(“GHI”)){
super.setStyle(“-fx字体重量:粗体”);/(1)
}
}     
否则{
super.setStyle(“-fx字体重量:正常”);/(2)
}
super.setText(项目);
}
}
}