java - 在 javaFx 中将整数表视图显示为字符串
问题描述
我试图显示一个表视图,其中当表中的值是一个像 1 这样的整数时,例如我想显示一个字符串。到目前为止,我试图像这样获得 cellValue:
public void changeView() {
if(intervall.getCellFactory().call(intervall).equals(1)) {
intervall.getCellFactory().call(intervall).setText("Täglich");
}
}
我在设置单元格值后在我的初始化中调用该方法。
public void initializeTable() {
try {
// Ablesen
Statement pStatement = connection.createStatement();
flightList = FXCollections.observableArrayList();
ResultSet myRs = pStatement
.executeQuery("select * from fluglinie where fluggesellschaft =\"" + fluggesellschaft + "\"");
while (myRs.next()) {
flightList.add(new flightRouteAddModel(myRs.getString("startFlughafen"),
myRs.getString("zielFlughafen"), myRs.getString("startDatum"), myRs.getString("flugzeug"),
myRs.getInt("intervall"), myRs.getInt("anzahlEconomy"), myRs.getInt("anzahlBusiness"),
myRs.getFloat("preisEconomy"), myRs.getFloat("preisBusines"), myRs.getFloat("distanz")));
}
} catch (Exception e) {
System.out.println(e);
}
startAirport.setCellValueFactory(new PropertyValueFactory<>("startAirport"));
targetAirport.setCellValueFactory(new PropertyValueFactory<>("targetAirport"));
flightDate.setCellValueFactory(new PropertyValueFactory<>("flightDate"));
airplane.setCellValueFactory(new PropertyValueFactory<>("airPlane"));
intervall.setCellValueFactory(new PropertyValueFactory<>("intervall"));
seatCountEco.setCellValueFactory(new PropertyValueFactory<>("countEconomy"));
seatCountBus.setCellValueFactory(new PropertyValueFactory<>("countBusiness"));
priceEco.setCellValueFactory(new PropertyValueFactory<>("priceEconomy"));
priceBus.setCellValueFactory(new PropertyValueFactory<>("priceBusiness"));
distance.setCellValueFactory(new PropertyValueFactory<>("distance"));
table.setItems(flightList);
changeView();
}
但它不起作用,有人可以看看这个吗?我知道更改数据库可能是一个更好的解决方案,但我有点想尝试这种解决方法
解决方案
cellFactory
回报TableCell
s 。自己调用它不会导致单元格TableView
成为(或成为其中的一部分)的一部分。如果传递了1 (或任何其他 ),则任何TableCell
具有适当实施equals
方法的方法都不会产生1 。true
Integer
假设您总是想显示Täglich
而不是 1,解决此问题的方法是cellFactory
为此列使用自定义:
intervall.setCellFactory(col -> new TableCell<flightRouteAddModel, Integer>() {
@Override
protected void updateItem(Integer item, boolean empty) {
String text = "";
if (item != null) {
switch(item) {
case 1:
text = "Täglich";
break;
case 7:
text = "Wöchentlich";
break;
default:
text = String.format("Alle %d Tage", item);
break;
}
}
setText(text);
}
});
顺便说一句:请了解 java 命名约定。这使得代码更容易被其他人阅读,它甚至应该让你自己也更容易阅读,因为所有的 java API(我知道的)都使用这些约定:类型名称以大写字母开头。
推荐阅读
- python - 如何在 python 中使用 BitBucket API 发布拉取请求评论?
- python - 如何使用 selenium - python 单击 shadow-root 内的按钮元素?
- android - 为什么当我尝试将状态设置为 STATE_SETTLING 时,BottomSheetBehavior 会抛出 java.lang.IllegalArgumentException:非法状态参数:2
- python - 将 selenium chrome 与非本地代理一起使用
- javascript - React-Native AsyncStorage
- spring - 使用 beanutils.properties 方法将属性从源类复制到目标类
- android - Google Analytics - 在网络浏览器中工作的 URL,而不是在 Unity 编辑器中
- pandas - UserWarning 的任何修复:pyarrow.open_stream 已弃用,请使用 pyarrow.ipc.open_stream?
- python - 如何在 admin.py 中使用带有部分模板的字段集?
- python - 仅使用加法和减法查找两个数字的乘积?