我仍然是Java编程的新手,并且很难理解一些概念 - 尤其是设置TableColumn
单元格值。 (如果有人能用外行的话来解释这一点,那就太棒了!)
这是我的问题......
我有一个tableview,我在derby数据库中加载了来自我的数据表的ObservableList
。将数据添加到表中的for循环是我从在线查看中学到的东西,它确实对我有用。我想更进一步,所以这是我的挑战......
ObservalbleList
会有类似的例子:第1行[玩具,高等]第2行[盒子,媒体等]等等。现在,我希望代码看这个列表看看如果在该行中 - 获取第一个值,如果等于高,中或低,则在我将分配的状态列中添加颜色图标(或者如果图标太多,则填充颜色)Example。这是我的代码,如果那个颜色图标片段也在for循环中可能会有意义。我想要实现的这个功能与excel中的条件格式相同。
data = FXCollections.observableArrayList();
while (rs.next()) {
ObservableList<String> row = FXCollections.observableArrayList();
for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++) {
row.add(rs.getString(i));
}
data.add(row);
data.add(row);
if (data.get(2).equals("High")) {
//***set cell icon red or color fill red with padding around***
}
}
mtable.setItems(data);
任何帮助表示赞赏!谢谢!
答案 0 :(得分:0)
对于TableColumn
值的设置,我不会解释它,因为之前已经回答过,而且你不是在问这个问题。您可以在How to set value to cell in TableView in javafx和Google快速搜索中找到更多信息。我搜索了&#34; javafx set tablecolumn value&#34;
您应该拥有适当的数据模型Class
,该数据模型具有适用于您从数据库获取的数据集的方法。我不知道您的数据库中有什么,所以我只是使用您在图片中发布的内容,即Item Name
,Priority
,Status
。
您当然可以将Circle
添加到TableView
,但应在数据模型Class
中正确声明。
我还需要一些我没有提供的东西:
好的,现在我要提供的内容以及我为实现目标所做的工作。
您需要使用数据模型Class
来存储数据库返回,这就是为什么正确设置它的重要性。因此,对于您返回时关注的每个数据点,它应该具有适当的set
和get
方法。
在返回数据的循环中,您需要创建new DataModel(x, y, z, ...);
并将其添加到ObservableList<DataModel>
。
以下是您提供的图片的示例基础:
Main.java
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
TableView<Data> dataTable = new TableView<>();
TableColumn<Data, String> itemName = new TableColumn<>("Item Name");
itemName.setCellValueFactory(cell -> new SimpleStringProperty(cell.getValue().getName()));
TableColumn<Data, String> priority = new TableColumn<>("Priority");
priority.setCellValueFactory(cell -> new SimpleStringProperty(cell.getValue().getPriority()));
TableColumn<Data, Circle> status = new TableColumn<>("Status");
status.setCellValueFactory(cell -> new SimpleObjectProperty<>(cell.getValue().getStatus()));
dataTable.getColumns().addAll(itemName, priority, status);
ObservableList<Data> data = FXCollections.observableArrayList();
Data high = new Data("toy", "high");
Data medium = new Data("box", "medium");
Data low = new Data("candy", "low");
data.addAll(high, medium, low);
dataTable.setItems(data);
Scene scene = new Scene(dataTable, 500, 500);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Data.java(这是我的数据模型)
public class Data {
private String name;
private String priority;
private Circle status;
public Data (String name, String priority){
setName(name);
setPriority(priority);
setStatus(priority);
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPriority(){
return priority;
}
public void setPriority(String priority){
this.priority = priority;
}
public Circle getStatus(){
return status;
}
public void setStatus(String priority){
Circle c = new Circle(5);
switch(priority){
case "high":
c.setFill(Color.GREEN);
break;
case "medium":
c.setFill(Color.YELLOW);
break;
case "low":
c.setFill(Color.RED);
break;
default:
}
status = c;
}
}
如您所见,我未在status
中提供Constructor
,而是使用Priority
来确定它。
希望这有帮助。