2016-05-17 8 views
0

私はJavaFXの初心者でもありますが、Javaで一般的にデータベースを使用することに慣れていませんが、既存のJavaFXプログラムを変換してTableViewデータベースのアイテムと置き換えて、ユーザーに追加または削除する権限を与えます。これは、本質的に、学生のためのコース登録プログラムの非常に単純化されたバージョンです。すべてがそのまま動作します。教員側でどのクラスの学生が登録されているかを見るために、データベースを使用するだけです。私は、データベースを呼び出してtableViewに適用する最善の方法に慣れていません。私はテーブル上の行を選択し、自分のアクションボタンをクリックしてその学生を登録できるようにしたい。どんな助けでも大歓迎です。データベースでテーブルビューを使用しているJavafx

コード:

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>(); 
     } 

答えて

1

ご質問は、おそらくStackOverflowの上で回答するには少し広すぎるですが、まあ、私は助けるかもしれないいくつかの他の質問とオフサイトのリソースへのリンクの答えを出してあげますとにかくあなた。


Sample for accessing a local database from JavaFXデータベース操作のための並行タスクを使用して、UIが応答し続けるようにします。サンプルについて

関連StackOverflowの質問は次のとおり

試料を包埋H2 databaseに基づいています。

このサンプルではJDBCを使用していますが、サンプルで示されているようないくつかの基本的な操作で問題ありません。より広範なシステムでは、JDBCではなくJPAを直接使用する方がよいでしょう。

さらに資源:

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

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

大規模な商用サービスではなく、学生向けのプロジェクトであることを前提とすると、単純な解決策に進んで、先に参照したH2ベースのサンプルを拡張して必要な機能を提供し、 JPA、JAX-RS、ネットワーク化されたサービスなどのライブラリ

関連する問題