复合中的SWT串联滚动条 [英] SWT tandem scrollbars in composite
问题描述
我正在尝试在从问题是,如果我将示例代码放在与Shell不同的Composite中,则示例将无法正常工作
the problem is that if I put the example code in a different Composite than the shell the example not working
import org.eclipse.swt.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class tandemWithButton {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout());
Button buttonAbove = new Button(shell, SWT.PUSH);
buttonAbove.setText("Button Above");
buttonAbove.setSize(40, 30);
// shell.setContent (buttonAbove);
Composite comp = new Composite(shell, SWT.NONE);
comp.setLayout(new FillLayout());
final ScrolledComposite sc1 = new ScrolledComposite(comp, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
Button button1 = new Button(sc1, SWT.PUSH);
button1.setText("Button 1");
button1.setSize(400, 300);
sc1.setContent(button1);
final ScrolledComposite sc2 = new ScrolledComposite(comp, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
Button button2 = new Button(sc2, SWT.PUSH);
button2.setText("Button 2");
button2.setSize(300, 400);
sc2.setContent(button2);
final ScrollBar vBar1 = sc1.getVerticalBar();
final ScrollBar vBar2 = sc2.getVerticalBar();
final ScrollBar hBar1 = sc1.getHorizontalBar();
final ScrollBar hBar2 = sc2.getHorizontalBar();
SelectionListener listener1 = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int x = hBar1.getSelection() * (hBar2.getMaximum() - hBar2.getThumb()) / Math.max(1, hBar1.getMaximum() - hBar1.getThumb());
int y = vBar1.getSelection() * (vBar2.getMaximum() - vBar2.getThumb()) / Math.max(1, vBar1.getMaximum() - vBar1.getThumb());
sc2.setOrigin(x, y);
}
};
SelectionListener listener2 = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int x = hBar2.getSelection() * (hBar1.getMaximum() - hBar1.getThumb()) / Math.max(1, hBar2.getMaximum() - hBar2.getThumb());
int y = vBar2.getSelection() * (vBar1.getMaximum() - vBar1.getThumb()) / Math.max(1, vBar2.getMaximum() - vBar2.getThumb());
sc1.setOrigin(x, y);
}
};
vBar1.addSelectionListener(listener1);
hBar1.addSelectionListener(listener1);
vBar2.addSelectionListener(listener2);
hBar2.addSelectionListener(listener2);
comp.pack();
comp.setSize(400, 300);
shell.setSize(400, 300);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
有人可以帮助我了解我在做什么错吗? 我如何将串联滚动条放在一个复合文件中,并在其上方/下方添加小部件. 提前致谢, 尤西
can someone please help me understand what am I doing wrong? how can I put the tandem scrollbars in a composite and add widgets above / below it. Thanks in advance, Yossi
推荐答案
问题出现在RowLayout
中,该问题无法反映父组件的大小,因此,尽管没有滚动条,但Composite
容器仍能获得所需的边界.必要的.
将具有外壳布局的行更改为shell.setLayout(new FillLayout());
,您将通过该按钮进行演示..
Problem is in the RowLayout
which does not reflect the size of parent component, so the Composite
container gets that bounds it needs, though no scrollbars are necessary.
Change the line with shell layout to shell.setLayout(new FillLayout());
and you'll get working demo with the button..
这篇关于复合中的SWT串联滚动条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!