Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx 8 TableView、TableColumns在调整大小时从右边缘消失_Javafx 8 - Fatal编程技术网

Javafx 8 TableView、TableColumns在调整大小时从右边缘消失

Javafx 8 TableView、TableColumns在调整大小时从右边缘消失,javafx-8,Javafx 8,使用一些自定义的调整大小行为,我丢失了TableView右侧的列。我必须使用unconstraint\u RESIZE\u POLICY(或者编写一个自定义策略),这样我就可以根据其内容调整某些列的大小 在应用程序中使用的TableView中,我有一些调整列大小的自定义行为。 当数据第一次填充时,我使用反射模式将一些列自动调整为其内容的大小。剩余列宽设置为剩余宽度的一部分(如果有3列未自动调整大小,则剩余宽度/3=列宽) 我还有一个列宽监听器,当用户拖动列宽或双击标题分隔符来调整列的大小时,它会

使用一些自定义的调整大小行为,我丢失了TableView右侧的列。我必须使用
unconstraint\u RESIZE\u POLICY
(或者编写一个自定义策略),这样我就可以根据其内容调整某些列的大小

在应用程序中使用的TableView中,我有一些调整列大小的自定义行为。 当数据第一次填充时,我使用反射模式将一些列自动调整为其内容的大小。剩余列宽设置为剩余宽度的一部分(如果有3列未自动调整大小,则剩余宽度/3=列宽)

我还有一个列宽监听器,当用户拖动列宽或双击标题分隔符来调整列的大小时,它会监听。我还听取表本身的宽度,然后为最后一列指定任何新的额外宽度。 上述方法可以正常工作,但问题是当用户调整一列或多列的大小,使最后一列尽可能小时,列将开始被推离TableView的右侧。这样做是有道理的,因为我的政策设置为“无约束”。显然,我不能使用
受约束的\u RESIZE\u策略
,否则上述逻辑将不起作用

是否有一个自定义策略,当用户增加列宽时,会将1中最右边的列减少1,因此首先是右边的列,直到它尽可能小,然后是下一个最右边的列,依此类推。还是我需要写下这种行为?我确实在TerrareFX中遇到了一个基于Koitlin的策略,它看起来很有趣,但我宁愿保持纯Java

基本上,我想要的结果是我现在拥有的,但是任何用户调整大小只是将最右边的列减少到最小大小,然后是下一个最右边的列,依此类推,直到用户调整大小的列右边的所有列都是最小大小,但在TableView上仍然可见。如果右侧没有可以调整大小的列,那么用户在没有先调整左侧列的大小之前,应该无法调整其列的大小。 列永远不会从TableView的右侧消失。 我已经编写了一个模拟这种行为的测试类,它在某些地方有点冗长,将在实际应用程序中进行重构

包应用;
导入java.io.Serializable;
导入java.lang.reflect.Method;
导入java.util.array;
导入java.util.List;
导入java.util.ResourceBundle;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.beans.property.ReadOnlyObjectWrapper;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.collections.FXCollections;
导入javafx.collections.ListChangeListener;
导入javafx.collections.ObservableList;
导入javafx.concurrent.Task;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.control.Skin;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableColumn.CellDataFeatures;
导入javafx.scene.control.TableColumnBase;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.Priority;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类TableViewSample扩展了应用程序{
private TableView table=new TableView();
私有ObservableList data=FXCollections.observableArrayList();
私有布尔columnResizeOperationPerformed=false;
私有字符串resizeThreeColumn=“”;
私有字符串resizeFourColumn=“”;
私有字符串resizeSixColumn=“”;
私有最终ExecutorService ExecutorService=Executors.newFixedThreadPool(1);
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公众假期开始(阶段){
场景=新场景(新组());
舞台设置宽度(1300);
舞台设置高度(600);
TableColumn oneColumn=新的TableColumn(“一”);
TableColumn twoColumn=新的TableColumn(“两”);
TableColumn threeColumn=新的TableColumn(“三”);
TableColumn fourColumn=新的TableColumn(“四”);
TableColumn fiveColumn=新的TableColumn(“五”);
TableColumn sixColumn=新的TableColumn(“六”);
TableColumn sevenColumn=新的TableColumn(“”);
TableColumn eightColumn=新的TableColumn(“”);
TableColumn nineColumn=新的TableColumn(“九”);
TableColumn十列=新的TableColumn(“十”);
TableColumn elevenColumn=新的TableColumn(“十一”);
TableColumn十二列=新的TableColumn(“十二”);
TableColumn thirteenColumn=新的TableColumn(“十三”);
TableColumn lastColumn=新TableColumn(“Last”);
table.setEditable(假);
表1.setPrefWidth(1100);
表2.setMaxWidth(1100);
表2.设置项目(数据);
table.getColumns().addAll(一列、两列、三列、四列、五列、六列、七列、八列、九列、十列、五列、十二列、三十列、最后一列);
表.固定单元大小(25.0);
//此cellValueFactory代码可以在实际应用程序中重构
oneColumn.setCellValueFactory(新的PropertyValueFactory(“oneColumn”));
setCellValueFactory(新回调(){
公共可观察值呼叫(CellDatap){
返回新的ReadOnlyObjectWrapper(p.getValue().getOneColumn());
}
});
setCellValueFactory(新的PropertyValueFactory(“twoColumn”);
setCellValueFactory(新的回调函数(){
公共可观察值呼叫(CellDatap){
返回新的ReadOnlyObjectWrapper(p.getValue().getWoColumn());
}
});