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;
}