JFaceの別のバグ?標準のメカニズムを使用してカスタムツールチップを実装しました:CellLabelProvider
メソッドの実装getToolTipText()
。
すべてがうまくいくように見えますが、そうではありません。
ビューとエディターがあり、どちらもこれらのカスタムツールチップを使用してテーブルを表示しています。エディターに焦点を合わせてそのセルにカーソルを合わせると、ツールチップが表示されます。正しい。ビューのテーブルのセルにカーソルを合わせると、ツールチップが表示されます。正しい。
ただし、マウスをtooptip内に移動して再度移動すると、フォーカスがエディターからビューに移動します(その逆も同様です)。
これがどういう意味なのかわかりません。それは確かに非常に気が散る。
誰かがこれを見たことがありますか?そうでない場合は、試してみてください!
再現するには、 JFaceSnippets3.11から取得したこのスニペットを取得します。
package org.eclipse.jface.snippets.viewers;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* Explore New API: JFace custom tooltips drawing.
*
* @author Tom Schindl <tom.schindl@bestsolution.at>
* @since 3.3
*/
public class Snippet011CustomTooltips {
private static class MyContentProvider implements IStructuredContentProvider {
@Override
public Object[] getElements( final Object inputElement ) {
return new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
}
@Override
public void dispose() {
}
@Override
public void inputChanged( final Viewer viewer, final Object oldInput, final Object newInput ) {
}
}
/**
* @param args
*/
public static void main( final String[] args ) {
final Display display = new Display();
final Shell shell = new Shell( display );
shell.setLayout( new FillLayout( SWT.VERTICAL ) );
final Text t = new Text( shell, SWT.MULTI );
t.setText( "1) Make sure focus is somewhere here. See the blinking caret!\n"
+ "2) Now get a tooltip displayed in the table by hovering there with the mouse cursor\n"
+ "3a) If you move the cursor INSIDE the tooltip just shortly and out again, the input focus will be stolen from this text field\n"
+ "3b) If you DO NOT move the cursor INSIDE the tooltip, input focus will remain with the text edit field\n\n"
+ "=> to me, this is a bug!" );
final TableViewer v = new TableViewer( shell, SWT.FULL_SELECTION );
v.getTable().setLinesVisible( true );
v.getTable().setHeaderVisible( true );
v.setContentProvider( new MyContentProvider() );
ColumnViewerToolTipSupport.enableFor( v, ToolTip.NO_RECREATE );
final CellLabelProvider labelProvider = new CellLabelProvider() {
@Override
public String getToolTipText( final Object element ) {
return "Tooltip (" + element + ") - if you move HERE, the table will grab input focus!";
}
@Override
public void update( final ViewerCell cell ) {
cell.setText( cell.getElement().toString() );
}
};
final TableViewerColumn column = new TableViewerColumn( v, SWT.NONE );
column.setLabelProvider( labelProvider );
column.getColumn().setText( "Table" );
column.getColumn().setWidth( 100 );
v.setInput( "" );
shell.setSize( 800, 400 );
shell.open();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() ) {
display.sleep();
}
}
display.dispose();
}
}