Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 如何自动设置表中每个列标题的列宽_Javafx_Column Width - Fatal编程技术网

Javafx 如何自动设置表中每个列标题的列宽

Javafx 如何自动设置表中每个列标题的列宽,javafx,column-width,Javafx,Column Width,我想通过编程自动设置列宽,以便使表头适合其内容 @Override public void initialize(URL url, ResourceBundle rb) { TableColumn<String, String> col1 = new TableColumn<>("C1"); TableColumn<String, String> col2 = new TableColumn<>("Column 2"); T

我想通过编程自动设置列宽,以便使表头适合其内容

@Override
public void initialize(URL url, ResourceBundle rb) {
    TableColumn<String, String> col1 = new TableColumn<>("C1");
    TableColumn<String, String> col2 = new TableColumn<>("Column 2");
    TableColumn<String, String> col3 = new TableColumn<>("Last Column (C3)");
    TableColumn<String, String> col4 = new TableColumn<>("blablabla");
    table.getColumns().add(col1);
    table.getColumns().add(col2);
    table.getColumns().add(col3);
    table.getColumns().add(col4);
    for(int i=0;i<4;i++) {
        System.out.println("Column width >> "+table.getColumns().get(i).getPrefWidth());
    }
}
@覆盖
公共void初始化(URL、ResourceBundle rb){
TableColumn col1=新的TableColumn(“C1”);
TableColumn col2=新的TableColumn(“第2列”);
TableColumn col3=新的TableColumn(“最后一列(C3)”);
TableColumn col4=新的TableColumn(“blabla”);
table.getColumns().add(col1);
table.getColumns().add(col2);
table.getColumns().add(col3);
table.getColumns().add(col4);

对于(int i=0;i您可以尝试:列大小调整策略:

请参见屏幕截图:

无约束调整策略 受约束的调整大小策略

好的,我找到了一种简单的方法,可以根据内容调整标题列的大小。 参考它可以计算文本宽度,并且在您能够设置正确的宽度之后

package tabledemo;
import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.*;
import javafx.scene.control.*;

public class FXMLDocumentController implements Initializable {
    @FXML private TableView<String> table;
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        TableColumn<String, String> column1 = new TableColumn<>("C1");
        TableColumn<String, String> column2 = new TableColumn<>("Column 2");
        TableColumn<String, String> column3 = new TableColumn<>("Last Column (C3)");
        TableColumn<String, String> column4 = new TableColumn<>("blablabla");
        table.getSelectionModel().getSelectedIndex();
        table.getColumns().add(column1);
        table.getColumns().add(column2);
        table.getColumns().add(column3);
        table.getColumns().add(column4);
        for(int i=0;i<4;i++) {
            String text = table.getColumns().get(i).getText();
            AffineTransform affinetransform = new AffineTransform();     
            FontRenderContext frc = new FontRenderContext(affinetransform,true,true);     
            Font font = new Font("Arial", Font.PLAIN, 12); //assuming 'Arial' is standard font in TableView
            double textwidth = (double)(font.getStringBounds(text, frc).getWidth());
            table.getColumns().get(i).setPrefWidth(textwidth+10);
        }            
    }     
}
package-tabledemo;
导入java.awt.Font;
导入java.awt.font.FontRenderContext;
导入java.awt.geom.AffineTransform;
导入java.net.URL;
导入java.util.ResourceBundle;
导入javafx.fxml.*;
导入javafx.scene.control.*;
公共类FXMLDocumentController实现可初始化{
@FXML私有表视图表;
@凌驾
公共void初始化(URL、ResourceBundle rb){
TableColumn column1=新的TableColumn(“C1”);
TableColumn column2=新的TableColumn(“第2列”);
TableColumn column3=新的TableColumn(“最后一列(C3)”);
TableColumn column4=新的TableColumn(“blabla”);
table.getSelectionModel().getSelectedIndex();
table.getColumns().add(column1);
table.getColumns().add(column2);
table.getColumns().add(column3);
table.getColumns().add(column4);

对于(int i=0;i,您可以在此处使用FontMetrics:

TableColumn<String, String> column1 = new TableColumn<>("C1");
    TableColumn<String, String> column2 = new TableColumn<>("Column 2");
    TableColumn<String, String> column3 = new TableColumn<>("Last Column (C3)");
    TableColumn<String, String> column4 = new TableColumn<>("blablabla");
    table.getSelectionModel().getSelectedIndex();
    table.getColumns().add(column1);
    table.getColumns().add(column2);
    table.getColumns().add(column3);
    table.getColumns().add(column4);

    FontMetrics fontMetrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(new Font("Arial", 12));

    for (int i = 0; i < 4; i++) {
        String text = table.getColumns().get(i).getText();
        double textwidth =      fontMetrics.computeStringWidth(text);
        table.getColumns().get(i).setPrefWidth(textwidth + 10);
    }
TableColumn column1=新的TableColumn(“C1”);
TableColumn column2=新的TableColumn(“第2列”);
TableColumn column3=新的TableColumn(“最后一列(C3)”);
TableColumn column4=新的TableColumn(“blabla”);
table.getSelectionModel().getSelectedIndex();
table.getColumns().add(column1);
table.getColumns().add(column2);
table.getColumns().add(column3);
table.getColumns().add(column4);
FontMetrics FontMetrics=Toolkit.getToolkit().getFontLoader().getFontMetrics(新字体(“Arial”,12));
对于(int i=0;i<4;i++){
字符串文本=table.getColumns().get(i).getText();
double textwidth=fontMetrics.computeStringWidth(文本);
table.getColumns().get(i).setPrefWidth(textwidth+10);
}

> p>我建议您首先考虑列标题的文本样式,使用FunTeMeals/


CSS analyzer或senicView将为Inspect CSS属性提供很大帮助。

您是否尝试将
prefWidth
设置为
控件。使用\u COMPUTED\u SIZE
?@愚蠢地说它不起作用。这次每个列标题的宽度设置为10.0您可以尝试我的答案。如果这不是您想要的,您需要计算Co的字符串宽度“输入每一列的内容,并将其宽度设置为最长的字符串宽度。@马赛尔:我自己解决了这个问题。看看我的答案,它不会调整内容大小,也不允许调整大小低于或高于表的总宽度。我想OP问到的问题与双击列分隔符时得到的结果类似。正如sillyfly提到的,我是一个试图找到一个调整列大小的解决方案,该列的宽度自动适合其内容在这种情况下,您需要计算内容的宽度,并将列的宽度设置为最宽的内容。我稍后将编写一个示例。这是正确的方法。但我建议使用JavaFX api:FontMetrics FontMetrics=Toolkit.getToolkit().getFontLoader().getFontMetrics(新字体(“Arial”,12));fontMetrics.computeStringWidth(文本);但它不是公共api,所以请小心使用。没问题。如果答案对您有帮助,请接受。
TableColumn<String, String> column1 = new TableColumn<>("C1");
    TableColumn<String, String> column2 = new TableColumn<>("Column 2");
    TableColumn<String, String> column3 = new TableColumn<>("Last Column (C3)");
    TableColumn<String, String> column4 = new TableColumn<>("blablabla");
    table.getSelectionModel().getSelectedIndex();
    table.getColumns().add(column1);
    table.getColumns().add(column2);
    table.getColumns().add(column3);
    table.getColumns().add(column4);

    FontMetrics fontMetrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(new Font("Arial", 12));

    for (int i = 0; i < 4; i++) {
        String text = table.getColumns().get(i).getText();
        double textwidth =      fontMetrics.computeStringWidth(text);
        table.getColumns().get(i).setPrefWidth(textwidth + 10);
    }