作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要让我的用户能够在 JavaFX 8 中调整 TableView 的列的大小。
这是代码的简化版本:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class TableViewSample extends Application {
private TableView table = new TableView();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group());
stage.setTitle("Table View Sample");
stage.setWidth(300);
stage.setHeight(500);
final Label label = new Label("Address Book");
label.setFont(new Font("Arial", 20));
table.setEditable(true);
TableColumn firstNameCol = new TableColumn("First Name");
TableColumn lastNameCol = new TableColumn("Last Name");
final Button button = new Button("Resize!");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
System.out.println("Pref Width before resizing: "+firstNameCol.getPrefWidth());
System.out.println("Width before resizing: "+firstNameCol.getWidth());
firstNameCol.setPrefWidth(100);
System.out.println("Pref Width after resizing: "+firstNameCol.getPrefWidth());
System.out.println("Width after resizing: "+firstNameCol.getWidth());
}
});
table.getColumns().addAll(firstNameCol, lastNameCol);
final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.setPadding(new Insets(10, 0, 0, 10));
vbox.getChildren().addAll(label,button, table);
((Group) scene.getRoot()).getChildren().addAll(vbox);
stage.setScene(scene);
stage.show();
}
}
如果您单击该按钮,第一列会调整大小。如果您手动调整第一列的大小然后单击按钮,则第一列不会调整大小并且 getWidth 和 getPrefWidth 返回不同的值!
我知道这是一个“首选”宽度,但没有“setWidth”方法,只有“getWidth”。
如果我设置了 maxWidth 和 minWidth,列就不能再调整大小了,所以我不能使用这些方法。
有谁知道如何设置列的有效宽度?
最佳答案
解决方案是同时设置最小和最大宽度,然后立即将它们设置回“默认”值。
column.setPrefWidth(newWidth);
column.setMinWidth(newWidth);
column.setMaxWidth(newWidth);
column.setMinWidth(0);
column.setMaxWidth(5000);
这样,前三个指令强制调整列的大小并保持正确的宽度;最后两条指令确保该列仍然可以以任何方式调整大小。
关于JavaFX 8 : TableColumn setPrefWidth doing nothing if user manually resizes the column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33348757/
我需要让我的用户能够在 JavaFX 8 中调整 TableView 的列的大小。 这是代码的简化版本: import javafx.application.Application; import j
我是一名优秀的程序员,十分优秀!