我在Swing
中有一个关于对话框,该对话框使用JEditorPane
来显示html
文档(setContentType("text/html");
)。
我想在Eclipse SWT应用程序中创建一个about对话框,并显示与html
中相同的Swing
文档格式(超链接,br等)。
我怎么能这样做?什么是合适的小部件? StyledText
?
我开始使用Browser
中的Handler
:
@Execute
public void execute(final Shell currentShell){
//load html file in textReader
Browser browser = new Browser(currentShell, SWT.NONE);
browser.setText(textReader.toString());
}
但没有显示任何内容。解决这个问题的正确方法是什么?
更新:经过测试的@Baz更改:
@Execute
public void execute(final Shell currentShell){
currentShell.setLayout(new FillLayout());
//load html file in textReader
Browser browser = new Browser(currentShell, SWT.NONE);
browser.setText(textReader.toString());
currentShell.pack();
}
它完全破坏了应用程序!加载html涵盖现有元素
答案 0 :(得分:2)
您可以随时使用带有嵌入式Dialog
小部件的优质旧版JFace Browser
:
public class BrowserDialog extends Dialog {
private String browserString;
protected BrowserDialog(Shell parentShell, String browserString) {
super(parentShell);
this.browserString = browserString;
}
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
GridLayout layout = new GridLayout(1, false);
composite.setLayout(layout);
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.widthHint = 400;
data.heightHint = 400;
composite.setLayoutData(data);
Browser browser = new Browser(composite, SWT.NONE);
browser.setText(browserString);
browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
return composite;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText("About");
}
@Override
public void okPressed() {
close();
}
public static void main(String[] args)
{
final Display display = new Display();
Shell shell = new Shell(display);
Color gray = display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
String hex = String.format("#%02x%02x%02x", gray.getRed(), gray.getGreen(), gray.getBlue());
new BrowserDialog(shell, "<body bgcolor='" + hex + "'><h2>TEXT</h2></body>").open();
}
}
看起来像这样:
如果您需要对话框按钮,只需将createButtonsForButtonBar(Composite parent)
方法替换为:
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, Dialog.OK, "OK", true);
createButton(parent, Dialog.CANCEL, "Cancel", false);
}
然后它会是这样的: