24

TableViewにデータを入力する方法を知りたいです...これまでに見たすべての例では、列とすべてを含むTableViewを作成し、シーンに追加しています。すべてJavaコード自体で行われます。

知りたいこと:JavaFxSceneBuilderで「フォーム」をデザインする場合。そこですべてのテーブルと列を定義します。Javaからデータを取り込むためにアクセスするにはどうすればよいですか?または、誰かが私にこれに関する適切なチュートリアルを教えてくれるなら、お願いします。

JavaFxSceneBuilderでフォームを定義しました-3列のTableViewのみ

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="288.0" prefWidth="293.0" xmlns:fx="http://javafx.com/fxml">
<children>
    <TableView fx:id="tableView" layoutX="35.0" layoutY="28.0" prefHeight="200.0" prefWidth="227.0">
    <columns>
        <TableColumn prefWidth="75.0" text="UserId" fx:id="UserId" />
        <TableColumn prefWidth="75.0" text="UserName" fx:id="UserName" />
        <TableColumn prefWidth="75.0" text="Active" fx:id="Active" />
    </columns>
    </TableView>
</children>
</AnchorPane>

JavaコードのResultSetにデータがあります。

ResultSet rs = c.createStatement().executeQuery(SQL);

TableViewにデータを入力する必要があります。

ありがとう

4

2 に答える 2

58

テーブルビューにアクセスするには、FXMLページのコントローラーを定義する必要があります。追加

fx:controller="path.to.MyController"

AnchorPaneFXMLファイルの属性。@FXML次に、コントローラーを作成し、これらの変数の前に注釈を付けて、FXMLファイルからTableView、TableColumnsをリンクします。

package path.to;

public class MyController implements Initializable {

    @FXML private TableView<User> tableView;
    @FXML private TableColumn<User, String> UserId;
    @FXML private TableColumn<User, String> UserName;
    @FXML private TableColumn<User, String> Active;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        UserId.setCellValueFactory(new PropertyValueFactory<User, String>("id"));
        UserName.setCellValueFactory(new PropertyValueFactory<User, String>("name"));
        Active.setCellValueFactory(new PropertyValueFactory<User, String>("active"));

        tableView.getItems().setAll(parseUserList());
    }
    private List<User> parseUserList(){
        // parse and construct User datamodel list by looping your ResultSet rs
        // and return the list   
    }
}

テーブルビューはメソッドに入力されinitializeます。コントローラでは、FXMLファイルがロードされている間にすでに作成されているため、新しいテーブルビューまたはテーブル列を作成していないことに注意してください。また、TableViewおよびTablecolumn変数名はfx:id、対応するFXMLファイルの値と同じである必要があることに注意してください。したがって、UserId、UserName、およびActiveの名前は便利な名前ではありませんが、FXMLファイルとControllerの両方で、それぞれuserIdCol、userNameCol、userActiveColなどの名前に変更してください。

于 2012-06-25T09:00:10.883 に答える
1

Yoはコントローラーでこれを行うことができます:

 @FXML
private TableView<User> table;
private List<User> users;

@Override
public void initialize(URL url, ResourceBundle rb) {
    // Set the columns width auto size
    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    table.getColumns().get(0).prefWidthProperty().bind(table.widthProperty().multiply(0.33));    // 33% for id column size
    table.getColumns().get(1).prefWidthProperty().bind(table.widthProperty().multiply(0.33));   // 33% for dt column size
    table.getColumns().get(2).prefWidthProperty().bind(table.widthProperty().multiply(0.33));    // 33% for cv column size
    table.getItems().setAll(this.users);
}
于 2014-05-21T14:00:33.007 に答える