想了好久的方法,也配有辦法判斷每行中有數據的地方添加按鈕setjava
bank_caozuo.setCellFactory((col)->{ TableCell<BankAccount, String> cell = new TableCell<BankAccount, String>(){ @Override protected void updateItem(String item, boolean empty) { super.updateItem(item, empty); Button button = new Button("set"); if (empty) { //若是此列爲空默認不添加元素 setText(null); setGraphic(null); } else { this.setGraphic(button); }
解釋:數據庫
bank_caozuo爲定義的列
@FXML
private TableColumn<BankAccount, String> bank_caozuo;
其實TableCell裏面方法updateItem(String item, boolean empty)一共兩個參數,這個empty能夠判斷列中每行是否有值,爲空不添加元素須要設置setText(null); setGraphic(null);
不爲空的話,添加set按鈕this.setGraphic(button);
2. 如何修改javafx中tableview中tablecell中的值,修改完回車表示保存到內存中ide
問題:javafx內部是有bind的,也就是說每次修改完以後,都會修改表格內存中的值得,後面我們保存到本身的文件或者數據庫中便可作到自動保存this
1 bankFangxiang.setCellFactory(TextFieldTableCell.forTableColumn()); 2 bankFangxiang.setCellValueFactory(cellData->cellData.getValue().bankFangxiangProperty()); 3 bankFangxiang.setOnEditCommit((col)->{ 4 BankAccount bankAccount = (BankAccount)col.getTableView().getItems().get(col.getTablePosition().getRow()); 5 bankAccount.setBankFangxiang(col.getNewValue()); 6 iniUtil.writeByPathName(bankAccount.getPath(),"account-normal","zhuanzhang",col.getNewValue());//寫入文件中 7 });
bankFangxiang.setCellFactory(TextFieldTableCell.forTableColumn());表示表格支持回車保存到展現的表格中
bankFangxiang.setCellValueFactory(cellData->cellData.getValue().bankFangxiangProperty()); 表示將bean的值自動填充到tablecell中
col.getTablePosition().getRow() 表示獲取鼠標編輯的那個tablecell的序號
(BankAccount)col.getTableView().getItems().get() 表示獲取tablecell的序號的bean,而後作類型轉換爲BankAccount便可獲取到編輯該行bean
col.getNewValue() 表示獲取tabcell編輯以後的值
3. javafx中按鈕打開fxml對應的窗口
問題:存在一個按鈕須要打開fxml對應的窗口
controller類中的調用
1 //轉帳,單獨打開菜單進行轉帳 2 zhu.setOnMouseClicked((col) -> { 3 4 BankViewer bankViewer = new BankViewer(); 5 try { 6 bankViewer.start(new Stage()); 7 } catch (Exception e) { 8 e.printStackTrace(); 9 } 10 });
BankViewer.java
1 public class BankViewer extends Application { 2 3 @Override 4 public void start(Stage primaryStage) throws Exception { 5 Parent root = FXMLLoader.load(getClass().getResource("queren.fxml")); 6 Scene scene = new Scene(root, 516, 264); 7 primaryStage.setTitle("確認"); 8 primaryStage.setScene(scene); 9 primaryStage.show(); 10 } 11 }
queren.fxml
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <?import javafx.scene.control.*?> 4 <?import javafx.scene.layout.*?> 5 <?import java.lang.*?> 6 7 <Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="264.0" prefWidth="516.0" 8 xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.BankController"> 9 <children> 10 <TableView fx:id="bank_tableview" editable="true" prefHeight="265.0" prefWidth="516.0"> 11 <columns> 12 <TableColumn fx:id="account" prefWidth="114.0" text="用戶名" /> 13 <TableColumn fx:id="money" prefWidth="126.0" text="456" /> 14 <TableColumn fx:id="bankFangxiang" prefWidth="38.0" text="123" /> 15 <TableColumn fx:id="bankPasswd" prefWidth="38.0" text="234" /> 16 <TableColumn fx:id="bank_caozuo" prefWidth="64.0" text="操做" /> 17 </columns> 18 <columnResizePolicy> 19 <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> 20 </columnResizePolicy> 21 </TableView> 22 </children> 23 </Pane>
其中spa
fx:controller="controller.BankController"對應的
BankController.java就是對應的controller類