1
我一直在這裏b for了一陣子,而且我似乎無法找到任何地方。我已經嘗試了所有我可以在網上找到的例子,似乎沒有任何工作!我一直無法找到這個問題,導致我認爲我錯過了一些基本的東西。 。 。Eclipse RCP對話框:大文本框不會滾動 - 而是創建一個巨大的對話窗口!
在我的Eclipse RCP程序中,我想顯示一個對話框,顯示加載數據文件時發生的錯誤列表。我重寫了TitleAreaDialog,並且只想顯示包含錯誤列表和OK按鈕的可滾動文本。
問題是,文本垂直滾動條不會變爲活動 - 文本只是越來越高,以適應文本。這會使對話框窗口的高度增加,直到它適合文本框或直到它達到屏幕的高度 - 然後它就會切斷文本框的底部。
如何防止對話框/文本框變得太大?我錯過了什麼?
感謝您的幫助!
-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;
}
}
感謝您的回覆亞倫。你說的話是有道理的,這是我認爲我的問題所在。 如何/在哪裏可以設置對話框的大小? 'TitleAreaDialog'不公開任何我能找到的setSize(或類似的)方法。我嘗試在每個我有權訪問的位置設置ScrollableDialog中父對象的大小,但每次都忽略它。 有什麼建議嗎? 再次感謝! -Christine – Chris 2010-07-05 16:12:46
在'createDialogArea()'中,調用'getShell()'並設置其大小。 – 2010-07-06 08:18:06
嗯,這調整了對話框的大小,但它又一次切斷了文本框的底部。文本框繼續在窗口底部的下方,滾動條仍然變灰(我看不到它的底部)。任何其他想法? – Chris 2010-07-06 11:28:30