2017-02-17 3 views
0

を紹介し、私はいくつかのハイライトを行うためには、私のテーブルの行のいくつかのスタイルを変更:この作品行の境界線の色を変更すると、いくつかの奇妙なセルシフト

table.setRowFactory(tv -> new TableRow<TableBean>() { 

     @Override 
     public void updateItem(TableBean item, boolean empty) { 

     super.updateItem(item, empty); 
     if (item == null) { 
      setStyle(""); 
     } else if (item.getComparisonElement().isMarker()) { 
      setStyle("-fx-border-color: red;"); 
     } else { 
      setStyle(""); 
     } 
     } 
    }); 

が、私はいくつかの細胞はANと「シフト」しています不要な副作用:

enter image description here

答えて

0

私はレイアウトをめちゃくちゃされずに境界線と他の人といくつかの列を有する疑いがあります。

デフォルトのスタイルシートmodena.cssがほとんどのボーダーエフェクトを実装する方法は、実際に「ネストされた背景」を使用することです。このアイデアは、インセットなしのソリッドバックグラウンドカラーを1つペイントし、次にポジティブインセットを使用して2番目のバックグラウンドカラーをペイントすることです。例えば。 0のインセットで赤い背景をペイントし、次に各面に1ピクセルのインセットを持つデフォルトの背景色で背景をペイントすると、1ピクセル幅の赤いボーダーのエフェクトが作成されます。 (実際には、実際の境界線設定を使用するよりも、このテクニックのほうがパフォーマンスが良いことが実証されています)。このユースケースの利点は、(実際の)境界線を追加すると、テーブル行のレイアウトがスペースとして変更されることです背景色を変更してもレイアウトには違いはありません。

ので、代わりにこれを試してみてください。

table.setRowFactory(tv -> new TableRow<TableBean>() { 

    @Override 
    public void updateItem(TableBean item, boolean empty) { 

     super.updateItem(item, empty); 
     if (item == null) { 
      setStyle(""); 
     } else if (item.getComparisonElement().isMarker()) { 
      setStyle("-fx-background-color: red, -fx-background;"+ 
        "-fx-background-insets: 0, 1;"); 
     } else { 
      setStyle(""); 
     } 
    } 
}); 
+0

awsomeさんは、作品の魅力のように! 「強調表示しない」行に触れることなく、これをどのように解決したか説明できますか? – kerner1000

+0

@ kerner1000簡単な説明を追加しました。 –

関連する問題