代码之家  ›  专栏  ›  技术社区  ›  NullPointerException

javaswt:如何在表中集中列的内容?

  •  0
  • NullPointerException  · 技术社区  · 6 年前

    我需要将表格第四列的单元格内容居中,现在它们从左侧开始。

        Table membersTable = new Table(clubComposite, SWT.BORDER | SWT.CHECK | SWT.FULL_SELECTION);
        membersTable.setLinesVisible(true);
        membersTable.setHeaderVisible(true);
        membersTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    
        TableColumn tblclmnName = new TableColumn(membersTable, SWT.NONE);
        tblclmnName.setWidth(150);
        tblclmnName.setText("Nombre");
    
        TableColumn tblclmnCommonPhoneNumber = new TableColumn(membersTable, SWT.NONE);
        tblclmnCommonPhoneNumber.setWidth(120);
        tblclmnCommonPhoneNumber.setText("Teléfono");
    
        TableColumn tblclmnCommonMoney = new TableColumn(membersTable, SWT.NONE);
        tblclmnCommonMoney.setWidth(150);
        tblclmnCommonMoney.setText("Participación Habitual");
    
        TableColumn tblclmnPayed = new TableColumn(membersTable, SWT.CENTER);
        tblclmnPayed.setWidth(50);
        tblclmnPayed.setText("Pagado"); 
    
        // populate Table
        for (int i=0; i<50; i++) {
            TableItem tableItem = new TableItem(membersTable, SWT.CENTER);                  
            tableItem.setText(new String[] {"person "+i, "610610620", "100", ""});
            tableItem.setImage(3, uncheckedImage);
        }
    

    我试过这样做:

    TableColumn tblclmnPayed = new TableColumn(membersTable, SWT.CENTER);
    

    但它似乎只是以专栏的标题为中心,而不是内容。

    在javaswt上有可能实现我的需求吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   avojak    6 年前

    为了使列的内容居中,需要指定 SWT.CENTER 样式位 TableItem 也。

    例如:

    final Table table = new Table(shell, SWT.BORDER | SWT.V_SCROLL | SWT.FULL_SELECTION);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    
    final TableColumn column1 = new TableColumn(table, SWT.NONE);
    column1.setText("Column 1");
    column1.setWidth(75);
    
    final TableColumn column2 = new TableColumn(table, SWT.NONE);
    column2.setText("Column 2");
    column2.setWidth(75);
    
    final TableColumn column3 = new TableColumn(table, SWT.CENTER);
    column3.setText("Column 3");
    column3.setWidth(75);
    
    for (int i = 0; i < 5; i++) {
        new TableItem(table, SWT.CENTER).setText(new String[] { "a", "b", "c" });
    }
    

    SWT.CENTER


    编辑

    我认为不可能通过样式位在表行中居中显示图像,因为它们似乎被忽略了。

    另一种方法是使用“绘制侦听器”(paint listener)绘制具有正确填充的图像,以使图像在列中居中(请参见: How to align image to center of table cell (SWT Table) ). 请注意,使用此方法时,行的大小不会根据图像的大小而调整,因此除非图像很小/与行的高度相同,否则必须进行一些额外的工作,以保持图像形状被切断。