0

私はJavaFXにかなり慣れていないため、一般的にJavaでデータベースを使用することにあまり慣れていませんが、作成した既存のJavaFXプログラムを変換して、TableViewテーブルにデータを入力しているリストを削除し、データベースの項目に置き換える必要がありますまた、ユーザーが追加または削除できるようにします。これは本質的に、学生向けのコース登録プログラムの非常に単純化されたバージョンです。すべてがそのまま機能します。データベースを使用して、教職員側でどの学生がどのクラスに登録されているかを確認できるようにするだけです。データベースを呼び出してtableViewに適用する最良の方法に精通していません。テーブルの行を選択し、アクション ボタンをクリックして、その生徒を登録できるようにしたいと考えています。どんな助けでも大歓迎です。

コード:

public class Screen3Controller implements Initializable {


        @FXML private Button continuebtn;
        @FXML private Button studAddCrseBtn;
        @FXML private Button yesBtn;
        @FXML private Label regStatus;


        @FXML private TableView<SummerClass> table;

        @FXML private TableColumn<SummerClass, Integer> id;
        @FXML private TableColumn<SummerClass, String> dept;
        @FXML private TableColumn<SummerClass,Integer> number;
        @FXML private TableColumn<SummerClass, String> title;
        @FXML private TableColumn<SummerClass, String> day;
        @FXML private TableColumn<SummerClass, String> time;
        @FXML private TableColumn<SummerClass, Boolean> checkbox;




        private ObservableSet<CheckBox> selectedCheckBoxes = FXCollections.observableSet();
        private ObservableSet<CheckBox> unselectedCheckBoxes = FXCollections.observableSet();

        private IntegerBinding numCheckBoxesSelected = Bindings.size(selectedCheckBoxes);

        @FXML
        private IntegerProperty index = new SimpleIntegerProperty();

        private final int maxNumSelected = 3;

public ObservableList<SummerClass> list1 = FXCollections.observableArrayList(
        new SummerClass (10001, "ACCT", 1010 , "Intro to Acct (3)", "MWF", "1:00 - 2:15" ),
        new SummerClass (10002, "ACCT", 2010 , "Acct for Bus. (3)", "MWF", "9:00 - 10:15" ),
        new SummerClass (10003, "ART", 1010 , "Fund. of Art (3)", "TR", "3:00 - 4:15" ),
        new SummerClass (10004, "ART", 1110 , "Art History (3)", "MWF", "1:00 - 2:15" ),
        new SummerClass (10005, "BIOL", 1010 , "Principles of Biology I (3)", "TR", "9:00 - 10:15" ),
        new SummerClass (10006, "BIOL", 2010 , "Principles of Biology II (3)", "MWF", "3:00 - 4:15" ),
        new SummerClass (10007, "CHEM", 1010 , "Principles of Chemistry I (3)", "MWF", "1:00 - 2:15" ),
        new SummerClass (10008, "CHEM", 2010 , "Principles of Chemistry II (3)", "TR", "9:00 - 10:15" ),
        new SummerClass (10009, "CPSC", 1010 , "Java I (3)", "TR", "3:00 - 4:15" ),
        new SummerClass (10010, "CPSC", 2010 , "Java II (3)", "MWF", "9:00 - 10:15" ),
        new SummerClass (10011, "ENGL", 1010 , "Composition I (3)", "MWF", "1:00 - 2:15" ),
        new SummerClass (10012, "ENGL", 2010 , "Composition II (3)", "TR", "3:00 - 4:15" ),
        new SummerClass (10013, "FIN", 1010 , "Principles of Finance I (3)", "MWF", "1:00 - 2:15" ),
        new SummerClass (10014, "FIN", 2010 , "Principles of Finance II (3)", "TR", "9:00 - 10:15" ),
        new SummerClass (10015, "GEO", 1010 , "Intro to Geology (3)", "MWF", "3:00 - 4:15" ),
        new SummerClass (10016, "GEO", 3610 , "Geology in History (3)", "TR", "1:00 - 2:15" ),
        new SummerClass (10017, "HIST", 1210 , "Western History (3)", "MWF", "9:00 - 10:15" ),
        new SummerClass (10018, "HIST", 1510 , "Fund. of History (3)", "MWF", "3:00 - 4:15" ),
        new SummerClass (10019, "MATH", 1010 , "Elementary Algebra (3)", "TR", "1:00 - 2:15" ),
        new SummerClass (10020, "MATH", 2010 , "Linear Algebra (3)", "MWF", "9:00 - 10:15" ),
        new SummerClass (10021, "NUTR", 1010 , "Nutrition Fundamentals (3)", "TR", "3:00 - 4:15" ),
        new SummerClass (10022, "PHYS", 1010 , "Intro to Physics (3)", "MWF", "1:00 - 2:15" ),
        new SummerClass (10023, "PHYS", 2010 , "Physics II (3)", "MWF", "9:00 - 10:15" ),
        new SummerClass (10024, "POL", 1010 , "Political Science I (3)", "TR", "3:00 - 4:15" ),
        new SummerClass (10025, "POL", 1010 , "Political Science II (3)", "MWF", "1:00 - 2:15" ),
        new SummerClass (10026, "STEM", 1010 , "Stem Education I (3)", "TR", "9:00 - 10:15" ),
        new SummerClass (10027, "STEM", 2010 , "Advanced Stem Education (3)", "TR", "3:00 - 4:15" ),
        new SummerClass (10028, "STEM", 3010 , "Stem Education in Business (3)", "MWF", "1:00 - 2:15" ));  


final ObservableList<SummerClass> list2 = FXCollections.observableArrayList();

@Override
public void initialize(URL location, ResourceBundle resources) {


    id.setCellValueFactory(new PropertyValueFactory<>("id"));
    dept.setCellValueFactory(new PropertyValueFactory<>("dept"));
    number.setCellValueFactory(new PropertyValueFactory<>("number"));
    title.setCellValueFactory(new PropertyValueFactory<>("title"));
    day.setCellValueFactory(new PropertyValueFactory<>("day"));
    time.setCellValueFactory(new PropertyValueFactory<>("time"));
    checkbox.setCellValueFactory(new PropertyValueFactory<SummerClass, Boolean>(""));
    checkbox.setCellFactory(new Callback<TableColumn<SummerClass, Boolean>, TableCell<SummerClass, Boolean>>(){
        public TableCell<SummerClass, Boolean> call(TableColumn<SummerClass, Boolean> p){
            return new CheckBoxTableCell<SummerClass, Boolean>();
        }
4

1 に答える 1

1

あなたの質問は、StackOverflow で回答するには少し広すぎる可能性がありますが、とにかく役立つ可能性のある他の質問やオフサイトのリソースにリンクする回答を掲載します。


UI の応答性を維持するために、データベース操作の並行タスクを使用し て JavaFX からローカル データベースにアクセスするサンプル。

サンプルの関連する StackOverflow の質問は次のとおりです。

このサンプルは、組み込みのH2 データベースに基づいています。

このサンプルでは JDBC を使用しています。これは、サンプルで示されているようないくつかの基本的な操作に適しています。より大規模なシステムの場合、JDBC を直接使用するよりも JPA を使用する方が適切です。

その他のリソース:

JavaFX アプリケーションをデータベースに直接接続するよりも柔軟な設計は、2 層アーキテクチャではなく 3 層アーキテクチャを使用することです。これを行うには、ネットワーク ベースのサービス レイヤー (JAX-RS を使用した SpringBoot や WildFly Swarm など) をデータベースの前面に配置し、クライアント アプリケーションからサービス レイヤーに通信します。サービス層は、データベース関連のすべての操作を担当します。ただし、このようなアプリケーションの構築は、データベースに直接接続するよりもかなり複雑です。

質問で提供したようにコントローラーにデータモデルを埋め込むのではなく、アプリケーションでいくつかの基本的な MVC 設計原則を使用することをお勧めします。MVC の部分を実行すると、少しトリッキーになるかもしれません。あなたはそれについてググってフレームワークを使うことができますが、それはあなたを混乱させるかもしれません. おそらく、フレームワークなしでコードを作成してみてください。ただし、カスタム設計作業を少しだけ行い、必要に応じて、Afterburner.fx や Gluon Ignite などの MVC タイプ システムを後付けします。あなたは開発を進めます。

これは大規模な商用製品ではなく学生プロジェクトであるため、前述の H2 ベースのサンプルを拡張して必要な機能を提供し、JPA などの他の多くのテクノロジーやライブラリを導入しない、最も単純なソリューションを選択することをお勧めします。 、JAX-RS、ネットワーク化されたサービスなど。

于 2016-05-17T21:45:02.957 に答える