所以我正在尝试学习如何使用JavaFx Tableview,并且我在本教程中讨论了:
在本教程中,他们表明,为了填充tableView,你必须用字符串填充它,但不是只需要将你格式化String为任何字符串SimpleStringProperty
我尝试没有格式,结果是没有任何信息显示!
另外我发现如果你想Integer在表中添加一个,你必须将它声明为SimpleIntegerProperty
现在我对JavaFx还不熟悉,但这是否意味着当我创建一个对象时,我必须格式化所有的整数和字符串以便能够填充我的TableView?它似乎相当愚蠢,但也许有更高的目的?还是有办法避免它?
我正在尝试使用以下代码创建一个包含单个列的表:
TableView<String> table = new TableView<String>();
table.getColumns().clear();
table.getColumns().add(new TableColumn<String, String>("City Name"));
table.setItems(cityList);
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个表格,其中包含"城市名称"列,后面是空白列
我是JavaFx的新手,所以可能有更好的方法.
有一段IndexOutOfBoundsException时间我想ListView在JavaFX中更新一个问题.
我有一个ListView与小模拟相对应的元素.通过单击一个列表元素,图形模拟将基于单击元素更新ListView.之后ListView需要更新和其他元素.这意味着将删除所有旧元素,仅显示新元素.
public void init() {
// simCont.initSimulation() returns ArrayList
ObservableList<Default> obsDefaultList = FXCollections
.observableArrayList(simCont.initSimulation());
listTest.getItems().addAll(obsDefaultList);
listTest.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<Default>() {
@Override
public void changed(
ObservableValue<? extends Default> observable,
Default oldValue, Default newValue) {
updateList(newValue);
}
});
}
private void updateList(Default chosen) {
ObservableList<Default> list = FXCollections
.observableArrayList(simCont.doSimulationStep(chosen.getId()));
listTest.getItems().clear();
listTest.getItems().addAll(list);
}
Run Code Online (Sandbox Code Playgroud)
首先显示了两个元素.当我点击其中一个ListView更新但我得到了IndexOutOfBoundsException.
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException
at com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList.subList(ReadOnlyUnbackedObservableList.java:136)
at javafx.collections.ListChangeListener$Change.getAddedSubList(ListChangeListener.java:242)
at com.sun.javafx.scene.control.behavior.ListViewBehavior.lambda$new$174(ListViewBehavior.java:258) …Run Code Online (Sandbox Code Playgroud) 我一直在寻找有关将数据刷新到tableview的信息.我试图直接修改模型,但我得到了一个bug.我修改了模型,但表格没有刷新,只有当我移动一列时,表格才显示修改后的值.
为了向您展示一个示例(13-6),我将学习该教程:
http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJABIEED
我修改它包括一个按钮,并在其动作中:
Button button = new Button("Modify");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
String name = table.getItems().get(0).getFirstName();
name = name + "aaaa";
table.getItems().get(0).setFirstName(name);
}
});
final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.getChildren().addAll(label, table, button);
vbox.setPadding(new Insets(10, 0, 0, 10));
Run Code Online (Sandbox Code Playgroud)
我想这是tableview中的一个错误,但有没有机会解决这个问题?
谢谢!
我的应用程序使用JPA读取数据到TableView然后修改并显示它们.该表刷新了JavaFx 2.0.3下的修改记录.在JavaFx 2.1,2.2下,该表不再刷新更新.我发现其他人有类似的问题.我的计划是继续使用2.0.3,直到某人修复了2.1和2.2下的问题.现在我知道它不是一个bug而且不会修复.好吧,我不知道如何处理这件事.以下是从示例演示修改代码以显示问题.如果我添加新记录或从表中删除旧记录,表格刷新正常.如果我修改记录,则在进行添加,删除或排序操作之前,表不会刷新更改.如果我删除修改后的记录并再次添加,表格将刷新.但修改后的记录放在表格的按钮上.好吧,如果我删除修改后的记录,添加相同的记录然后将记录移动到原始位置,表格将不再刷新.下面是一个完整的代码,请对此有所启发.
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class Main extends Application {
private TextField firtNameField = new TextField();
private TextField lastNameField = new TextField();
private TextField emailField = new TextField();
private Stage editView;
private Person fPerson;
public static class Person {
private final …Run Code Online (Sandbox Code Playgroud) 我需要在具有可变列数的TableView中更改任意单元格的样式.下面的代码显示了基本问题.
ExampleRow类是来自电子表格的真实数据的代理,其他功能是保存突出显示信息.由于我不知道会有多少列,所以我只保留一列应该突出显示的列(不支持列重新排列).ExampleTableCell类只设置单元格的文本,并根据需要应用突出显示.
如果我在绘制表格[cell(2,2)]之前设置了一个高亮显示,那么当应用程序启动时,单元格会正确显示红色文本.问题是单击按钮设置单元格(1,1)以突出显示但表格不会更改.如果我将应用程序窗口调整为空,则再次打开它,正确绘制单元格(1,1)的突出显示 - 可能是因为此过程强制完全重绘.
我想知道的是如何触发表重绘新突出显示的单元格(或所有可见单元格),以便样式正确?
TIA
package example;
import java.util.HashSet;
import java.util.Set;
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;
public class CellHighlightExample extends Application {
private final int columnCount = 4;
private final int rowCount = 5;
private TableView<ExampleRow> table = new TableView<>();
@Override
public void start(Stage stage) {
BorderPane root = …Run Code Online (Sandbox Code Playgroud)