- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是想看看是否能够使用 FXML 中的 TableView 将 MS Access 中的数据获取到表中,但是 MS Access 中的表中的任何数据都不会出现在 TableView 中。但是,如果我仅将表的内容显示为消息对话框,则会显示所有正确的信息。请有人告诉我哪里出了问题。
我看了这个 YouTube 视频 1 ,并按照它一步步操作,以及其他来源,但没有解决我的问题。
@FXML
private TableView<modelTable> table;
@FXML
private TableColumn<modelTable, StringProperty> colStudentName;
@FXML
private TableColumn<modelTable, StringProperty> colSurname;
@FXML
private TableColumn<modelTable, IntegerProperty> colGrade;
@FXML
private TableColumn<modelTable, StringProperty> colEmail;
ObservableList<modelTable> list = FXCollections.observableArrayList();
@Override
public void initialize(URL url, ResourceBundle rb) {
try {
Connection connection = DBConnect.getConnection();
ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM data");
while (rs.next()) {
//If I run the JOptionPane on its own, all the data is displayed
//JOptionPane.showMessageDialog(null, (rs.getString("StudentName")+ "\t" + rs.getString("Surname") + "\t" + rs.getInt("Grade") + "\t" + rs.getString("Email")));
list.add(new modelTable(rs.getString("StudentName"), rs.getString("Surname"), rs.getInt("Grade"), rs.getString("Email")));
}
} catch (SQLException ex) {
Logger.getLogger(TableController.class.getName()).log(Level.SEVERE, null, ex);
}
colStudentName.setCellValueFactory(new PropertyValueFactory<>("StudentName"));
colSurname.setCellValueFactory(new PropertyValueFactory<>("Surname"));
colGrade.setCellValueFactory(new PropertyValueFactory<>("Grade"));
colEmail.setCellValueFactory(new PropertyValueFactory<>("Email"));
table.setItems(list);
}
}
public class modelTable {
private StringProperty colName, colSurname, colEmail;
private IntegerProperty colGrade;
public modelTable(String colName, String colSurname, int colGrade, String colEmail) {
this.colName = new SimpleStringProperty(colName);
this.colSurname = new SimpleStringProperty(colSurname);
this.colEmail = new SimpleStringProperty(colEmail);
this.colGrade = new SimpleIntegerProperty(colGrade);
}
public String getColName() {
return colName.get();
}
public void setColName(String colName) {
this.colName.set(colName);
}
public String getColSurname() {
return colSurname.get();
}
public void setColSurname(String colSurname) {
this.colSurname.set(colSurname);
}
public String getColEmail() {
return colEmail.get();
}
public void setColEmail(String colEmail) {
this.colEmail.set(colEmail);
}
public int getColGrade() {
return colGrade.get();
}
public void setColGrade(int colGrade) {
this.colGrade.set(colGrade);
}
}
public class DBConnect {
public static Connection getConnection() throws SQLException{
Connection connection = DriverManager.getConnection("jdbc:ucanaccess://C://Users//Huzaifah//Desktop//School work 2019//testing table.accdb");
return connection;
}
当我运行程序时,我希望数据位于 TableView 中,但它是空的。没有给出错误消息,只有一个空表。
我尝试在一个没有 TableView 的简单程序中使用相同的数据库,它工作得很好。
最佳答案
问题在于您如何为每列设置 CellValueFactory
:
colStudentName.setCellValueFactory(new PropertyValueFactory<>("StudentName"));
colSurname.setCellValueFactory(new PropertyValueFactory<>("Surname"));
colGrade.setCellValueFactory(new PropertyValueFactory<>("Grade"));
colEmail.setCellValueFactory(new PropertyValueFactory<>("Email"));
您指定的属性(StudentName
、Surname
等)与 modelTable
类中的任何公开属性都不匹配。在 modelTable
中,出于某种原因,所有属性都以“col”开头。
<小时/>As a side note, Java naming conventions suggest that class names begin with a capital letter...
您应该重构 ModelTable
类以使用 TableView
可见的属性。您应该更改属性名称以更好地反射(reflect)数据。添加“col”前缀会令人困惑且不必要,因为您的模型类不应该关心或知道它将如何显示:
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
class Scratch {
private final StringProperty name = new SimpleStringProperty();
private final StringProperty surname = new SimpleStringProperty();
private final StringProperty email = new SimpleStringProperty();
private final IntegerProperty grade = new SimpleIntegerProperty();
public modelTable(String colName, String colSurname, int colGrade, String colEmail) {
this.name.set(colName);
this.surname.set(colSurname);
this.email.set(colEmail);
this.grade.set(colGrade);
}
public String getName() {
return name.get();
}
public StringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
public String getSurname() {
return surname.get();
}
public StringProperty surnameProperty() {
return surname;
}
public void setSurname(String surname) {
this.surname.set(surname);
}
public String getEmail() {
return email.get();
}
public StringProperty emailProperty() {
return email;
}
public void setEmail(String email) {
this.email.set(email);
}
public int getGrade() {
return grade.get();
}
public IntegerProperty gradeProperty() {
return grade;
}
public void setGrade(int grade) {
this.grade.set(grade);
}
}
<小时/>
请注意我们现在如何将属性声明为 Final 并将它们初始化为类字段。我们可以这样做,因为我们可以更改属性的值,但不会更改属性本身。
另请注意,我们为每个属性添加一个 getter。这允许我们在设置每个 CellValueFactory 时直接在 Controller 中引用它们。
然后您需要更新 setCellValueFactory()
方法以使用新的属性名称。我不建议使用反射(但是,创建一个新的 PropertyValueFactory()
),因为对于公开的属性,这是不必要的。
相反,只需直接传递对属性的引用即可:
colStudentName.setCellValueFactory(features -> features.getValue().nameProperty());
colSurname.setCellValueFactory(features -> features.getValue().surnameProperty());
colEmail.setCellValueFactory(features -> features.getValue().emailProperty());
colGrade.setCellValueFactory(features -> features.getValue().gradeProperty());
关于java - 如何修复 Microsoft Access 中的表(使用 SQL)中的数据未显示在我的 TableView (fxml) 上的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849711/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!