現在、SWT TableViewerを使用しています。そして私は与えられたStyledCellLabelProvider
の実装を持っています。私はそれに一連の入力を与えて、それをうまく表示します。あるユースケースでは、テーブルから特定のアクションを実行するためにテーブルから行を選択することができ、変更が行われた各行の特定のセルにアイコンを追加する必要があります。更新後にクリックしない限り、SWT TableViewerセルに画像が表示されない
私がここに取り組んでいる問題は、変更を行った後にテーブルビューア内で物理的にクリックしない限り、イメージが表示されないということです。テーブルビューアの選択は、変更が実行された後も変わりません。私はStyledCellLabelProvider
の更新がテーブルビューアで更新を呼び出した後に呼び出されていることを知っています。
私の質問は、なぜクリックしないと表示されないのですか?
MyStyledCellLabelProvider
public void update(ViewerCell cell) {
if (cell.getElement() instanceof Foo && ((Foo)cell.getElement()).hasBeenModified()) {
cell.setImage(myImage);
}
cell.setText("ABCD");
}
TableViewerComposite
@Override
public void notifyModificationMade(Object[] modifiedObjects){
//Update input on tableviewer
...
//Refresh after updating
tableViewer.refresh(); //Triggers the StyledCellLabelProvider to be called
}
おかげで再び!
EDIT:
だから私は忘れてしまった情報の一つが更新されているセルは時々テキストの代わりにそれのorg.eclipse.ui.forms.widgets.Hyperlink
既存の内部を持つことになり、画像が追加された後、それを持ち続けるということです。私はこれが問題を引き起こしていると思います。ハイパーリンクコードを削除してテキストに戻ったとき、意図したとおりに機能しました。ここでは、HyperLink
をセルに追加するために使用しているコードを示します。あなたがStyledCellLabelProvider.javaのソースコードからupdate
の内側にあなたのコードの後にsuper.update(cell);
を呼び出す必要が
public void update(ViewerCell cell) {
if (cell.getElement() instanceof Foo && ((Foo)cell.getElement()).hasBeenModified()) {
cell.setImage(myImage);
final Hyperlink link = new Hyperlink((Composite) cell.getViewerRow().getControl(),
SWT.UNDERLINE_LINK);
link.setUnderlined(true);
link.setBackground(link.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
link.setForeground(link.getDisplay().getSystemColor(SWT.COLOR_BLUE));
link.setText("My url");
link.setHref(url);
link.addHyperlinkListener(new HyperlinkAdapter() {
...
});
TableItem item = (TableItem) cell.getItem();
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(link, item, cell.getColumnIndex());
editor.layout();
}
}
これを試したところ、同じ問題が発生していました。 – roblangenfeld
'update'が呼ばれた後、ブレークポイント' cell.setImage(...) 'を打つのですか?また、あなたの 'MyStyledCellLabelProvider'は' ILabelProvider'のようなインターフェースを実装していますか? – SomeDude
'MyStyledCellLabelProvider'は' org.eclipse.jface.viewers.StyledCellLabelProvider'を拡張し、イメージが設定された後に 'update'が呼び出されています。 – roblangenfeld