2014-09-24 52 views
0

下面的代碼創建一個帶有足夠列的TableView來需要一個水平滾動條。如何讓JavaFX TableView中的網格線保持銳利?

最初,TableView中的網格線具有一個像素的寬度,因爲這是銳利的。

滾動到TableView的最右側,突然間網格線的寬度爲兩個像素,一個比另一個要輕。

這使網格線看起來模糊。

這可能是由JavaFX認爲網格線處於分數點(滾動後)而不是像素上,因此將網格線與周圍環境混合在一起造成的。

我該如何告訴JavaFX不要這樣做?

我可以更改滾動條,以便它只選擇精確的像素邊界嗎?

謝謝。

在下面的代碼中,我將網格線顏色更改爲紅色(使用css)以使其明顯,但是如果使用默認顏色,則會出現相同的問題。

import javafx.application.Application; 
import javafx.beans.property.ReadOnlyObjectWrapper; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.scene.Scene; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class TableTest4 extends Application { 
    @Override 
    public void start(Stage stage) throws Exception { 
     BorderPane borderPane = new BorderPane(); 
     Scene scene = new Scene(borderPane, 500, 500); 
     String cssFile = getClass().getResource("tabletest4.css").toExternalForm(); 
     scene.getStylesheets().add(cssFile); 
     stage.setScene(scene); 

     TableView<Integer> table = new TableView<>(); 

     ObservableList<Integer> data = FXCollections.observableArrayList(); 
     for (int i = 0; i < 20; i++) { 
      data.add(i); 
     } 
     table.setItems(data); 

     for (int i = 0; i < 20; i++) { 
      String text = ""; 
      if (i % 2 == 0) { 
       text = "sdfd"; 
      } else if (i % 3 == 0) { 
       text = "dghg hghj"; 
      } else if (i == 17) { 
       text = "This Hopppsdssss"; 
      } 
      TableColumn<Integer,String> column = new TableColumn<>(Integer.toString(i) + " " + text); 
      column.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue().toString())); 
      table.getColumns().add(column); 
     } 

     borderPane.setCenter(table); 
     stage.show(); 
    } 

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

和CSS是:

.table-view{ 
    -fx-table-cell-border-color: red; 
} 

回答