2016-05-17 1 views
0

Я довольно новичок в JavaFX, а также не очень хорошо знаком с использованием баз данных на Java в целом, но мне нужно преобразовать существующую программу JavaFX, которую я сделал, чтобы удалить список, который заполняет TableView таблицы и заменить его на элементы из базы данных и дать пользователю возможность добавлять или удалять. Это, по сути, очень упрощенный вариант программы регистрации курса для учащегося. Все работает так, как есть, мне просто нужно использовать базу данных, чтобы сторона факультета могла быть использована для просмотра, какие студенты зарегистрированы для каких классов. Я просто не знаком с лучшим способом вызвать базу данных и применить ее к tableView. Я хочу иметь возможность выбрать строку в таблице, нажать кнопку действия и зарегистрировать этого ученика. Любая помощь приветствуется.Javafx, используя 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>(); 
     } 

ответ

1

Ваш вопрос, вероятно, немного слишком широка, чтобы ответить на StackOverflow, но хорошо, я надену ответ, что ссылки на некоторые другие вопросы и за пределами площадки ресурсов, которые могут помочь вы все равно.


Sample for accessing a local database from JavaFX с использованием параллельных задач для операций с базами данных, так что пользовательский интерфейс остается отзывчивым.

Связанные StackOverflow вопрос для образца:

Образец основан на встроенном H2 database.

В этом примере используется JDBC, что отлично подходит для нескольких основных операций, например, демонстрируемых в образце. Для более обширной системы было бы лучше использовать JPA, а не JDBC напрямую.

Дополнительные ресурсы:

Более гибкий дизайн, чем подключение вашего приложения JavaFX непосредственно к базе данных, заключается в использовании трехуровневой архитектуры, а не двухуровневой архитектуры. Для этого вы должны поставить перед базой данных сетевой уровень обслуживания (например, SpringBoot или WildFly Swarm с использованием JAX-RS), а затем связаться с вашими клиентскими приложениями на уровне обслуживания. Уровень сервиса отвечает за все операции, связанные с базой данных. Однако создание такого приложения довольно сложнее, чем прямое подключение к базе данных.

Возможно, вы захотите использовать некоторые основные принципы проектирования MVC в приложении, а не встраивать модель данных в контроллер, как вы указали в своем вопросе. Выполнение части MVC может стать для вас немного сложной задачей. Вы можете об этом подумать и использовать фреймворк, но это может вас смутить. Возможно, просто попробуйте скомпоновать его без каких-либо фреймворков, но, возможно, просто небольшую индивидуальную работу по дизайну и, при необходимости, модифицируйте систему типа MVC, такую ​​как Afterburner.fx или Gluon Ignite, если вы обнаружите, что выиграете от такой вещи, как вы прогресс в развитии.

Учитывая, что это студенческий проект, а не крупное коммерческое предложение, я бы посоветовал просто перейти к простейшему решению, распространив образец на основе H2, упомянутый ранее, чтобы предоставить вам необходимую функциональность, а также не вводить много других технологий или библиотеки, такие как JPA, JAX-RS, сетевые службы и т. д.