在Mac上使用SWT。我创建了一个统一工具栏。在此工具栏上有一个Scale小部件和一个Label小部件。标签显示比例的当前值,由Scale
上的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(),shell,工具栏和Scale小部件,这些组合似乎合理。一个正常的人会认为它是一个不合理的大量组合。
问题1:如何让拇指在启动时正常工作?
跟进问题,重要性低得多:
问题2:“缩放”窗口小部件似乎忽略pageIncrement和增量设置。为什么呢?
非常感谢任何帮助。
更新:深夜玩耍。将“缩放”窗口小部件移动到shell - 并且对上面包含的测试代码没有其他更改,窗口小部件可以正常工作 - 拇指可以立即工作。它会看到Scale和统一工具栏在第一眼就看不到太多。
答案 0 :(得分:1)
问题2 :
你可以实现"捕捉"通过向Listener
添加SWT.Selection
来增加步数值。在下面的代码中,它将捕捉到5
的所有倍数:
scale.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
// get the current selection and "round" it to the next 5er step
int scaleValue = scale.getSelection();
scaleValue = (int)(Math.round(scaleValue / 5.0) * 5);
// update the label
label.setText("" + (scaleValue));
label.pack();
// update the scale selection
scale.setSelection(scaleValue);
}
});
我无法帮助你解决问题1,但是......