Я уже давно трахаюсь с этим, и, похоже, никуда не денусь. Я перепробовал все примеры, которые я могу найти в Интернете, но ничего не получается! Я не смог найти много по этой проблеме, которая заставляет меня думать, что я упускаю что-то базовое. , .
В моей программе Eclipse RCP я хочу отобразить диалоговое окно, в котором будет показан список ошибок, произошедших при загрузке файла данных. Я переопределил TitleAreaDialog и просто хочу отобразить прокручиваемый текст, содержащий список ошибок и кнопку ОК.
Проблема в том, что вертикальные полосы прокрутки текста не становятся активными - текст просто становится выше, чтобы соответствовать тексту. Это приводит к увеличению высоты диалогового окна до тех пор, пока оно не уместится в текстовое поле или не достигнет высоты экрана, а затем просто обрежет нижнюю часть текстового поля.
Как предотвратить слишком большой размер диалогового / текстового поля? Чего мне не хватает?
Спасибо за вашу помощь !!
-Christine
...
Вот простая программа, показывающая мой диалог:
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.*;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class ScrollableDialogRunner {
public static void main(String[] args) {
System.out.println("starting");
Display display = new Display ();
Shell shell = new Shell (display);
String errors = "one\ntwo\nthree\nfour\nfive\n";
for(int i = 0; i < 5; i++){
errors += errors;
}
ScrollableDialog dialog = new ScrollableDialog(shell, "Errors occurred during load", "The following errors occurred while loaded file 'x.data'", errors);
dialog.open();
}
}
class ScrollableDialog extends TitleAreaDialog {
private String title;
private String text;
private String scrollableText;
public ScrollableDialog(Shell parentShell, String title, String text, String scrollableText) {
super(parentShell);
this.title = title;
this.text = text;
this.scrollableText = scrollableText;
}
@Override
protected Control createDialogArea(Composite parent) {
GridLayout layout = new GridLayout();
layout.numColumns = 1;
parent.setLayout(layout);
GridData gridData = new GridData();
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
Text scrollable = new Text(parent, SWT.BORDER | SWT.V_SCROLL);
scrollable.setLayoutData(gridData);
scrollable.setText(scrollableText);
return parent;
}
@Override
public void create() {
super.create();
setTitle(title);
setMessage(text, IMessageProvider.ERROR);
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
Button okButton = createButton(parent, OK, "OK", true);
okButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
close();
}
});
}
@Override
protected boolean isResizable() {
return false;
}
}