问题
I have a list in a composite and is defined in the following way :
List list = new List(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
when the list is in disabled state (list.setEnabled(false);), and the values inside the list are more than the height of the list, is there any way to make the vertical scroll bar enabled?
回答1:
The scroll bars are handled by the OS. Consequently, the OS will decide when to show/hide the scroll bars and when to let the user use them. You can't influence that.
There is a very similar question here.
However, you can wrap your List
in a ScrolledComposite
. This way, you can still scroll even if the List
is disabled:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final ScrolledComposite composite = new ScrolledComposite(shell, SWT.V_SCROLL);
composite.setLayout(new FillLayout());
List list = new List(composite, SWT.NONE);
for (int i = 0; i < 20; i++)
{
list.add("Item: " + i);
}
composite.setContent(list);
composite.setExpandHorizontal(true);
composite.setExpandVertical(true);
composite.setMinSize(list.computeSize(SWT.DEFAULT, SWT.DEFAULT));
list.setEnabled(false);
shell.pack();
shell.setSize(100, 150);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
Looks like this:

回答2:
Context
I had encountred this issue last week i had to enable scrollbars in a disabled table view to prevent users from checking items checkboxes.
Solution
Since we can't enable vertical and horizontal scrollbars in disabled table view, i just prevent user from checking the checkboxes when he is not supposed to, and i also make item on gray foreground when the table is supposed to be disabled.
来源:https://stackoverflow.com/questions/22450462/is-it-possible-to-get-the-vertical-horizontal-scroll-bar-visible-when-the-swt-li