如何在SWT文本组件中实现自动隐藏滚动条
我有一个SWT文本组件,我为它设置了如何在SWT文本组件中实现自动隐藏滚动条,swt,scrollbar,Swt,Scrollbar,我有一个SWT文本组件,我为它设置了SWT.MULTI、SWT.V_SCROLL和SWT.H_SCROLL,以便在需要时显示滚动条。 我发现,即使内容小于文本组件,在禁用状态下也可以看到滚动条 有什么方法可以自动隐藏滚动条吗?就像java Swing有JScrollPane。水平滚动条根据需要根据您不能隐藏垂直滚动条,它是操作系统(Windows)特定的L&F。您可以通过使用SWT.WRAP而不使用SWT.H\u滚动条摆脱水平条。这种方式适用于所有情况: Text text = new Text
SWT.MULTI
、SWT.V_SCROLL
和SWT.H_SCROLL
,以便在需要时显示滚动条。
我发现,即使内容小于文本组件,在禁用状态下也可以看到滚动条
有什么方法可以自动隐藏滚动条吗?就像java Swing有JScrollPane。水平滚动条根据需要根据您不能隐藏垂直滚动条,它是操作系统(Windows)特定的L&F。您可以通过使用
SWT.WRAP
而不使用SWT.H\u滚动条
摆脱水平条。这种方式适用于所有情况:
Text text = new Text(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
Listener scrollBarListener = new Listener () {
@Override
public void handleEvent(Event event) {
Text t = (Text)event.widget;
Rectangle r1 = t.getClientArea();
Rectangle r2 = t.computeTrim(r1.x, r1.y, r1.width, r1.height);
Point p = t.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
t.getHorizontalBar().setVisible(r2.width <= p.x);
t.getVerticalBar().setVisible(r2.height <= p.y);
if (event.type == SWT.Modify) {
t.getParent().layout(true);
t.showSelection();
}
}
};
text.addListener(SWT.Resize, scrollBarListener);
text.addListener(SWT.Modify, scrollBarListener);
Text Text Text=新文本(父级,SWT.MULTI | SWT.H|u SCROLL | SWT.V|u SCROLL);
Listener scrollBarListener=新的侦听器(){
@凌驾
公共无效handleEvent(事件){
Text t=(Text)event.widget;
矩形r1=t.getClientArea();
矩形r2=t.computeTrim(r1.x,r1.y,r1.width,r1.height);
点p=t.computeSize(SWT.DEFAULT,SWT.DEFAULT,true);
t、 getHorizontalBar().setVisible(r2.width@Plamen:非常好的解决方案,谢谢。我也遇到了同样的问题,但是对于带有SWT.WRAP样式的多行文本,没有水平滚动条
为了使其正常工作,我必须改变一些事情:
Text text = new Text(parent, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
Listener scrollBarListener = new Listener (){
@Override
public void handleEvent(Event event) {
Text t = (Text)event.widget;
Rectangle r1 = t.getClientArea();
// use r1.x as wHint instead of SWT.DEFAULT
Rectangle r2 = t.computeTrim(r1.x, r1.y, r1.width, r1.height);
Point p = t.computeSize(r1.x, SWT.DEFAULT, true);
t.getVerticalBar().setVisible(r2.height <= p.y);
if (event.type == SWT.Modify){
t.getParent().layout(true);
t.showSelection();
}
}};
text.addListener(SWT.Resize, scrollBarListener);
text.addListener(SWT.Modify, scrollBarListener);
Text Text Text=新文本(父级,SWT.MULTI | SWT.WRAP | SWT.V|u滚动);
Listener scrollBarListener=新的侦听器(){
@凌驾
公共无效handleEvent(事件){
Text t=(Text)event.widget;
矩形r1=t.getClientArea();
//使用r1.x作为呜呜声,而不是SWT.DEFAULT
矩形r2=t.computeTrim(r1.x,r1.y,r1.width,r1.height);
点p=t.computeSize(r1.x,SWT.DEFAULT,true);
t、 getVerticalBar().setVisible(r2.height你可以使用StyledText
而不是Text
StyledText
的方法setAlwaysShowScrollBars
可以设置为false
非常好,非常感谢!这对我来说终于奏效了,这是摆脱RAP中水平滑块的唯一方法。你不应该忘记接受answer-?工作正常,但遗憾的是StyledText
似乎不支持setEnabled(布尔b)
正确。请参阅