设置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]);
我有 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]);