当前位置:   article > 正文

JavaFx 用户界面控件3——TableView_javafx tableview

javafx tableview

1.表格视图 TableView

ableView是JavaFX提供的一个强大的控件,可以用于显示表格数据。它通过为TableView设定items属性(存储行数据的ObservableList对象)和列属性(TableColumn对象)来完成数据填充与展示。

以下是一个简单的TableView的使用示例:

  1. public class TableViewExample extends Application {
  2. //创建表格
  3. private TableView<Person> table = new TableView<Person>();
  4. private ObservableList<Person> data =
  5. FXCollections.observableArrayList(
  6. new Person("John", "Doe"),
  7. new Person("Jane", "Deer"));
  8. public static void main(String[] args) {
  9. launch(args);
  10. }
  11. @Override
  12. public void start(Stage stage) {
  13. //构建场景
  14. Scene scene = new Scene(new Group());
  15. stage.setTitle("Table View Sample");
  16. stage.setWidth(300);
  17. stage.setHeight(500);
  18. //创建列
  19. TableColumn firstNameCol = new TableColumn("First Name");
  20. firstNameCol.setMinWidth(100);
  21. firstNameCol.setCellValueFactory(
  22. new PropertyValueFactory<Person, String>("firstName"));
  23. TableColumn lastNameCol = new TableColumn("Last Name");
  24. lastNameCol.setMinWidth(100);
  25. lastNameCol.setCellValueFactory(
  26. new PropertyValueFactory<Person, String>("lastName"));
  27. //表格加入列
  28. table.setItems(data);
  29. table.getColumns().addAll(firstNameCol, lastNameCol);
  30. ((Group) scene.getRoot()).getChildren().addAll(table);
  31. stage.setScene(scene);
  32. stage.show();
  33. }
  34. //对象
  35. public static class Person {
  36. private final String firstName;
  37. private final String lastName;
  38. private Person(String fName, String lName) {
  39. this.firstName = fName;
  40. this.lastName = lName;
  41. }
  42. public String getFirstName() {
  43. return firstName;
  44. }
  45. public String getLastName() {
  46. return lastName;
  47. }
  48. }
  49. }

 1.1 TableView 选中事件

  1. public class TableSelectApp extends Application {
  2. @Override
  3. public void start(Stage primaryStage) throws Exception {
  4. //创建表格
  5. TableView<Item> tblItems = new TableView<>();
  6. tblItems.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
  7. VBox.setVgrow(tblItems, Priority.ALWAYS );
  8. //创建列
  9. TableColumn<Item, String> colSKU = new TableColumn<>("SKU");
  10. TableColumn<Item, String> colDescr = new TableColumn<>("Item");
  11. TableColumn<Item, Float> colPrice = new TableColumn<>("Price");
  12. TableColumn<Item, Boolean> colTaxable = new TableColumn<>("Tax");
  13. //列对应实体属性
  14. colSKU.setCellValueFactory( new PropertyValueFactory<>("sku") );
  15. colDescr.setCellValueFactory( new PropertyValueFactory<>("descr") );
  16. colPrice.setCellValueFactory( new PropertyValueFactory<>("price") );
  17. colTaxable.setCellValueFactory( new PropertyValueFactory<>("taxable") );
  18. //表格加入列
  19. tblItems.getColumns().addAll(
  20. colSKU, colDescr, colPrice, colTaxable
  21. );
  22. //添加数据
  23. tblItems.getItems().addAll(
  24. new Item("KBD-0455892", "Mechanical Keyboard", 100.0f, true),
  25. new Item( "145256", "Product Docs", 0.0f, false ),
  26. new Item( "OR-198975", "O-Ring (100)", 10.0f, true)
  27. );
  28. //创建按钮
  29. Button btnInventory = new Button("Inventory");
  30. Button btnCalcTax = new Button("Tax");
  31. //按钮是否可用属性绑定表格选中的数据对应的descr属性
  32. btnInventory.disableProperty().bind(
  33. tblItems.getSelectionModel().selectedItemProperty().isNull()
  34. );
  35. //按钮是否可用属性绑定表格选中的数据对应的taxable属性
  36. btnCalcTax.disableProperty().bind(
  37. tblItems.getSelectionModel().selectedItemProperty().isNull().or(
  38. Bindings.select(
  39. tblItems.getSelectionModel().selectedItemProperty(),
  40. "taxable"
  41. ).isEqualTo(false)
  42. )
  43. );
  44. //构建场景
  45. HBox buttonHBox = new HBox( btnInventory, btnCalcTax );
  46. buttonHBox.setSpacing( 8 );
  47. VBox vbox = new VBox( tblItems, buttonHBox );
  48. vbox.setPadding( new Insets(10) );
  49. vbox.setSpacing( 10 );
  50. Scene scene = new Scene(vbox);
  51. primaryStage.setTitle("TableSelectApp");
  52. primaryStage.setScene( scene );
  53. primaryStage.setHeight( 376 );
  54. primaryStage.setWidth( 667 );
  55. primaryStage.show();
  56. }
  57. public static void main(String[] args) {
  58. launch(args);
  59. }
  60. public class Item {
  61. private final String sku;
  62. private final String descr;
  63. private final Float price;
  64. private final Boolean taxable;
  65. public Item(String sku, String descr, Float price, Boolean taxable) {
  66. this.sku = sku;
  67. this.descr = descr;
  68. this.price = price;
  69. this.taxable = taxable;
  70. }
  71. public String getSku() {
  72. return sku;
  73. }
  74. public String getDescr() {
  75. return descr;
  76. }
  77. public Float getPrice() {
  78. return price;
  79. }
  80. public Boolean getTaxable() {
  81. return taxable;
  82. }
  83. }
  84. }

演示应用程序是一个TableView和一对按钮。有TableView四个表列:SKU、商品、价格、税费。该TableView图显示三行中的三个对象:机械键盘、产品文档、O 形圈。以下屏幕截图显示了应用程序启动后立即出现的情况。按钮Inventory绑定了Item属性,Tax按钮绑定了Tax属性

 

点击第一行,两个按钮都被激活

 若此文档不够详细,​可以参考十分钟教你JAVAFX基础入门_哔哩哔哩_bilibili​

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/191627
推荐阅读
相关标签
  

闽ICP备14008679号