我是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>();
}
您的问题可能有点太宽泛,无法在StackOverflow上回答,但是我会给出一个答案,链接到其他一些问题和可能对您有所帮助的场外资源。
使用数据库操作的并发任务从JavaFX访问本地数据库的示例,以便UI保持响应。
样本的相关StackOverflow问题是:
该示例基于嵌入式 H2 数据库。
此示例使用 JDBC,这对于一些基本操作(如示例中演示的操作)非常有用。对于更广泛的系统,最好使用JPA而不是直接使用JDBC。
其他资源:
与将 JavaFX 应用程序直接连接到数据库相比,更灵活的设计是使用三层体系结构而不是两层体系结构。为此,您需要使用基于网络的服务层(例如,使用JAX-RS的Spring靴或WildFly群)来前端数据库,然后从客户端应用程序到服务层进行通信。服务层负责所有与数据库相关的操作。但是,构造这样的应用程序比直接连接到数据库要复杂得多。
您可能希望在应用程序中使用一些基本的MVC设计原则,而不是像您在问题中提供的那样将数据模型嵌入到html" target="_blank">控制器中。做MVC部分对你来说可能有点棘手。你可以谷歌一下,使用一个框架,但这可能会让你感到困惑。也许,只是尝试在没有任何框架的情况下编写代码,但也许只是一点点定制设计工作,如果需要,改造一个MVC类型的系统,如Afterburner.fx或Gluon Ignite,如果你发现随着开发的进展,你会从这样的东西中受益的话。
鉴于这是一个学生项目,而不是一个大型的商业产品,我建议只采用最简单的解决方案,扩展前面提到的基于H2的示例,以提供您需要的功能,而不要引入很多其他技术或库,如JPA、JAX-RS、网络服务等。
问题内容: 我开始学习javaFX,我需要用数据库中的数据填充表。我在网上阅读了很多代码,但没有找到我想要的东西。我读了这篇文章,但不知道如何实现最后一个功能。我阅读了一些其他代码来做到这一点,到目前为止,这是我的一些代码: 我希望你能帮帮我 问题答案: 我相信这会为您提供帮助: 在控制器类中执行以下操作: 并为每个要使用TableView操纵的实体(表)创建一个单独的Java文件POJO 我已经
我严格遵循了一个教程,但我似乎无法让它发挥作用。本教程位于IDE的非模块化JavaFX和Intellij部分:https://openjfx.io/openjfx-docs/#install-爪哇 以下是我在尝试运行默认Intellij Idea JavaFX项目时收到的错误消息: 通向jdk-11.0.1和javafx-sdk-11.0.1的路径: C:\Program Files\Java J
本文向大家介绍python3+PyQt5使用数据库表视图,包括了python3+PyQt5使用数据库表视图的使用技巧和注意事项,需要的朋友参考一下 上文提到窗体可以一次性呈现出来自同一记录的各个域,但是对于用户希望能看到多条记录的表来说,就需要使用表格化的视图了。本文通过python3+pyqt5改写实现了python Qt gui 快速变成15章的例子,用户能够一次看到多条记录。 运行结果: 以
我用已有的片段组合。我的xml结构 在ComposeView中,我使用LazyColum,它与日志崩溃 我认为这个错误的原因是LazyColum(可滚动)放在其他可滚动(NestedScrollView)中。但是如果我删除嵌套的ScrollView,它看起来像 当我在LazyColumn中滚动列表时,CollapsingToolbarLayout不滚动。这是下一个bug。 如何修复它? 请帮帮我,
我想在我的应用程序中使用firestore,因为扩展限制是100万个并发连接。我发现价格是相当高的,特别是当与实时数据库相比,但不能使用它,因为它只有200k左右。 我想知道我是否可以使用firestore,它将在客户端直接访问我的一些数据,这些数据将需要live document侦听器,并且使用实时数据存储更大的数据块,这些数据块将通过firebase函数间接查询。 我的问题是: 如果读/写实时
问题内容: 每次访问数据库记录时,什么是最合适的和最有效的存储视图计数的方法? 我有包含以下字段的表: 每个项目都有自己的永久链接:http : //domain.com/item_name 我希望能够使用此数据并在页面上显示一个。哪种方法最好? 方法一 在表中创建一个附加字段,并对其进行更新以增加视图计数: 方法B 创建一个包含以下字段的新表: 并在每次查看页面时将新记录添加到表中。 方法C 完