相关疑难解决方法(0)

SimpleStringProperty和SimpleIntegerProperty TableView JavaFX

所以我正在尝试学习如何使用JavaFx Tableview,并且我在本教程中讨论了:

Oracle tableview教程

在本教程中,他们表明,为了填充tableView,你必须用字符串填充它,但不是只需要将你格式化String为任何字符串SimpleStringProperty

我尝试没有格式,结果是没有任何信息显示!

另外我发现如果你想Integer在表中添加一个,你必须将它声明为SimpleIntegerProperty

现在我对JavaFx还不熟悉,但这是否意味着当我创建一个对象时,我必须格式化所有的整数和字符串以便能够填充我的TableView?它似乎相当愚蠢,但也许有更高的目的?还是有办法避免它?

java javafx tableview

12
推荐指数
1
解决办法
2万
查看次数

JavaFx 2使用单列创建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的新手,所以可能有更好的方法.

java layout tableview javafx-2

7
推荐指数
1
解决办法
7019
查看次数

在JavaFX中更新ListView时IndexOutOfBoundsException

有一段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)

listview javafx indexoutofboundsexception

7
推荐指数
1
解决办法
9930
查看次数

从模型中对TableView中的行进行自动更新

我一直在寻找有关将数据刷新到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中的一个错误,但有没有机会解决这个问题?

谢谢!

tableview javafx-2

6
推荐指数
1
解决办法
2万
查看次数

JavaFx 2.1,2.2 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)

javafx-2

3
推荐指数
3
解决办法
2万
查看次数

JavaFX 2刷新表格单元格以改变样式

我需要在具有可变列数的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)

javafx-2

2
推荐指数
1
解决办法
6915
查看次数