设置3个表格的不同单元格宽度

Set different cell widths of 3 tables

我有 3 个 table 相同的表格,但它们的编号不同。的列,我想为每个 table 设置不同的列宽。我能否在下面的代码中获得它,或者我必须创建 3 个不同的 类 扩展 table 然后设置不同的约束宽度?通过这样做,我写了三次我不想做的相同代码。

protected void beforeReport(Form f){
  Table table=new MyTable(new DefaultTableModel(columnNamesInOut,dataInOut));
  Table tablePunishment=new MyTable(new DefaultTableModel(columnNamesPunishment,dataPunishment));
  Table tableAccident=new MyTable(new DefaultTableModel(columnNamesAccident,dataAccident));
}

public class MyTable extends Table {

  public MyTable(TableModel tm) {
    super(tm, true);
  }

  public Component createCell(Object value, int row, int col, boolean editable) {
    Component component = null;
    if (value instanceof Vector) {
      Container c = new Container(new BoxLayout(BoxLayout.Y_AXIS));
      Iterator i = ((Vector) value).iterator();
      while (i.hasNext()) {
        c.addComponent(new Label(i.next().toString()));
      }
      component = c;
    } else {
      component = super.createCell(value, row, col, editable);
    }
    return component;
  }

  @Override
  protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
    TableLayout.Constraint constraint = ((TableLayout) this.getLayout()).createConstraint();
    constraint.setVerticalAlign(CENTER);
    addComponent(constraint);

    switch (column) {
      case 0: {
        constraint.setWidthPercentage(25);
        break;
      }
      case 1: {
        constraint.setWidthPercentage(25);
        break;
      }
      case 2: {
        constraint.setWidthPercentage(25);
        break;
      }
      case 3: {
        constraint.setWidthPercentage(25);
        break;
      }
    }
    return constraint;
  }
}

如果您希望所有列的宽度都相同,您可以这样做:

protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
   TableLayout.Constraint constraint = ((TableLayout) this.getLayout()).createConstraint();
   constraint.setVerticalAlign(CENTER);
   addComponent(constraint);
   constraint.setWidthPercentage(100 / getModel().getColumnCount());
   ...
 }

否则,您可以使用以下行中的新构造函数:

public class MyTable extends Table {
  private int[] widths;
  public MyTable(TableModel tm, int... widths) {
    super(tm, true);
    this.widths = widths;
  }

然后您可以在 createCell 中执行此操作:

constraint.setWidthPercentage(widths[column]);