MacでSWTを使用する。統合ツールバーを作成します。このツールバーには、スケールウィジェットとラベルウィジェットがあります。ラベルには、スケールのSelectionListenerによって更新されたスケールの現在の値が表示されます
プログラムの起動時に、スケールウィジェットのサムは移動しません。ラベルは、値が期待どおりに正確に変化していること、スケールウィジェットがカーソルの動きを正しく追跡し、変化した値を報告していることを示しています。親指は動かない。
ユニファイドツールバーを閉じて再度開くと(右上の小さなボタンを使用)、サムが完全に機能するようになります。親指がカーソルを追跡します。
シンプルでコンパイル可能で実行可能なテストコードの複製の問題は次のとおりです。
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.*;
public class scaleTest
{
private static Shell shell;
private static Display display;
private ToolBar UnifiedToolBar;
private Scale scale;
private scaleTest()
{
UnifiedToolBar = shell.getToolBar();
ToolItem containScale = new ToolItem( UnifiedToolBar, SWT.SEPARATOR );
containScale.setWidth( 200 );
scale = new Scale( UnifiedToolBar, SWT.HORIZONTAL );
scale.setMaximum( 72 );
scale.setSelection( 2 );
scale.setMinimum( 6 );
scale.setIncrement( 4 );
scale.setPageIncrement( 4 );
scale.setSize( 180, 24 );
containScale.setControl( scale );
ToolItem containLabel = new ToolItem( UnifiedToolBar, SWT.SEPARATOR );
containLabel.setWidth( 20 );
final Label label = new Label( UnifiedToolBar, SWT.NONE );
label.setText( "32" );
containLabel.setControl( label );
scale.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent selectionEvent )
{
label.setText( String.valueOf( scale.getSelection() ) );
}
} ); // end addSelectionListener
} // end of constructor
public static void main( String[] args )
{
display = Display.getDefault();
shell = new Shell( display );
shell.setText( "scaleTest App" );
shell.setSize( 400, 200 );
shell.setLocation( (display.getClientArea().width / 2) - 200
,(display.getClientArea().height / 2) - 100 );
shell.setLayout( new FormLayout() );
scaleTest testExample = new scaleTest();
shell.open();
while( !shell.isDisposed() )
{
if( !display.readAndDispatch() )
display.sleep();
}
display.dispose();
}
} // end scaleTest class
シェル、ツールバー、およびスケールウィジェットで、layout()、layout(true、true)、redraw()、paint()、pack()を、妥当と思われる数の組み合わせで試しました。普通の人間はそれを不当に多くの組み合わせと見なすでしょう。
質問1:起動時に親指を正常に機能させる方法は?
それほど重要ではないフォローアップの質問:
質問2:スケールウィジェットは、pageIncrementとincrementの両方の設定を無視しているように見えます。なんで?
どんな援助でも大歓迎です。
更新:深夜に遊んでいます。Scaleウィジェットをシェルに移動します-上記のテストコードに他の変更はありません。ウィジェットは希望どおりに機能します-thumbはすぐに機能します。スケールと統合ツールバーは一目でお互いをあまり好きではないことがわかります。