FlexTable
レイアウト上のバグとの対策
現象
FlexTableには非常に大きなバグがある。しかし、FlexTableの構造上、不可避のものなので「仕様」と言ってもよいかもしれない。
例えば以下のコードを実行すると、Bはなぜか2列目にはならず、三列目になってしまう。 つまり、(0,0)位置のセルのRowSpanを2にすると、二行目の列位置がずれてしまう。
FlexTable table = view.getFlexTable(); table.setText(0, 0, "X"); table.getFlexCellFormatter().setRowSpan(0, 0, 2); table.setText(0, 1, "A"); table.setText(1, 1, "B");
以下のように、後から(0,0)位置のセルを入れても同じ現象になる。
FlexTable table = view.getFlexTable(); table.setText(0, 1, "A"); table.setText(1, 1, "B"); table.setText(0, 0, "X"); table.getFlexCellFormatter().setRowSpan(0, 0, 2);
原因
これは、実際に生成されるtableタグでの解釈と、FlexTableでのセル位置指定にズレがあるからである。 例えば、上の例の場合、いずれも
<tr> <td rowspan="2">X</td> <td>A</td> </tr> <tr> <td></td> <td><B</td> </tr>
というタグが生成される。FlexTable側としては指示された場所にデータを入れているつもりだろうが、 tableタグの解釈としては、これはプログラマの意図とは異なるものになってしまう。 つまり、AとBは同じ列にはならない。
対策
FlexTableをそのまま使う上での対策としては、(この例の場合では)プログラマ側が、どの列が一つ多くなっているかを認識し、その列より右側の列位置を指定する再に、列インデックスを減産するというものである。しかしこれはいかにも面倒であろう。