javafx這些學會後,開發就不難了,往tablecloumn列中添加按鈕,修改javafx中tableview中tablecell中的值,修改完回車表示保存到內存中

  1. javafx開發過程中遇見難題,往tablecloumn列中添加按鈕

想了很久的方法,也配有辦法判斷每行中有數據的地方添加按鈕set

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中的值,修改完回車表示保存到內存中

問題:javafx內部是有bind的,也就是說每次修改完之後,都會修改表格內存中的值得,後面咱們保存到自己的文件或者數據庫中即可做到自動保存

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>
View Code

其中

fx:controller="controller.BankController"對應的
BankController.java就是對應的controller類
 
 
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章