在简单的 Eclipse RAP 中导航 web-application
Navigation in a simple Eclipse RAP web-application
感觉这里obvous/basic要问点什么,但是技术方面我是菜鸟,还没有搞清楚"correct"的做事方式就这样吧。
背景
我目前正在开发一个 web-application 作为业余爱好项目。我决定使用 Eclipse RAP(RWT Standalone) for the UI. The application will be deployed on Eclipse Virgo 服务器(Tomcat 变体),因为我打算利用 OSGI 框架 (使一些业务逻辑更容易实现,但这超出了这个问题的范围).
问题
该应用程序将有多个部分,一次只能显示其中一个部分。虽然设置 RAP 相对容易,但我无法理解如何在应用程序的不同部分之间设置导航。
我的意思是,例如在应用程序 header 中具有 "Data" 和 "Settings" 等按钮,并且这些按钮下方的内容会根据用户单击的按钮而变化.
当前解
目前我想到的最简单的解决方案是
- 使用活动 Shell 作为可见部分的 parent
- 为所有非活动部分
创建一个次要的不可见 Shell 作为 parent
- 如果可见部分发生变化,则使用
currentlyVisibleSection.setParent(backgroundShell)
将当前可见部分移至背景 Shell 并使用 newVisibleSection.setParent(activeShell)
使所选部分可见
下一个精简示例说明了这个想法:
public class TestUI extends AbstractEntryPoint {
private Composite visibleSection;
private Shell backgroundShell;
public void createContents( Composite parent ) {
backgroundShell = new Shell();
//Implementation comes from other OSGI bundles
Composite dataSection = createDataSection(parent);
Composite settingsSection = createSettingsSection(backgroundShell);
visibleSection = dataSection;
Button dataButton = new Button(parent, SWT.PUSH);
dataButton.setText("Data");
dataButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (visibleSection!=dataSection) {
visibleSection.setParent(backgroundShell);
dataSection.setParent(parent);
visibleSection=dataSection;
parent.layout();
}
}
});
Button settingsButton = new Button(parent, SWT.PUSH);
settingsButton.setText("Data");
settingsButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (visibleSection!=settingsSection) {
visibleSection.setParent(backgroundShell);
settingsSection.setParent(parent);
visibleSection=settingsSection;
parent.layout();
}
}
});
}
}
显然我已经去掉了所有的布局和样式代码,而且它仍然需要一些工作才能让最终用户看起来体面。它确实需要我手动跟踪所有不同的部分,创建它们并管理它们,但这对我来说是可以接受的。所以总的来说,这几乎完成了我需要它做的事情,但感觉有点 "hackish".
问题
- 这种做事方式是否有一些重大缺陷或根本缺陷?
- 纯粹使用 Eclipse RAP 是否有更好的处理方式?
我也研究了一下使用 Eclipse workspaces/perspectives (Workbench),但这似乎给应用程序增加了大量的复杂性(更不用说最初的 learning-curve ),我宁愿避免它。特别是因为我不需要大部分功能。
StackLayout
是显示控件堆栈的推荐方式,一次只能显示一个控件。
下面的示例创建按钮区域以在父级顶部显示选择按钮("Data"、"Settings"、...),容器占用剩余的 space .所有部分都在使用 StackLayout
.
的容器中创建
parent.setLayout( new GridLayout( 1, false ) );
Composite buttonArea = new Composite( parent, SWT.NONE );
buttonArea.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false ) );
Composite container = new Composite( parent, SWT.NONE );
container.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
StackLayout containerLayout = new StackLayout();
container.setLayout( containerLayout );
Composite dataSection = createDataSection( container );
Composite settingsSection = createDataSection( container );
选择侦听器代码告诉布局要显示哪个部分。
dataButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent event ) {
containerLayout.topControl = dataSection;
container.layout();
}
});
有关布局的更多信息,另请参阅这篇文章:https://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html
你走在正确的轨道上。不要使用 workbench(如您所说的 "workspaces/perspectives"),它添加的内容比您可能需要的要多得多。此外,该堆栈的某些部分可以在需要时独立使用。例如 JFace 查看器或核心命令。
感觉这里obvous/basic要问点什么,但是技术方面我是菜鸟,还没有搞清楚"correct"的做事方式就这样吧。
背景
我目前正在开发一个 web-application 作为业余爱好项目。我决定使用 Eclipse RAP(RWT Standalone) for the UI. The application will be deployed on Eclipse Virgo 服务器(Tomcat 变体),因为我打算利用 OSGI 框架 (使一些业务逻辑更容易实现,但这超出了这个问题的范围).
问题
该应用程序将有多个部分,一次只能显示其中一个部分。虽然设置 RAP 相对容易,但我无法理解如何在应用程序的不同部分之间设置导航。
我的意思是,例如在应用程序 header 中具有 "Data" 和 "Settings" 等按钮,并且这些按钮下方的内容会根据用户单击的按钮而变化.
当前解
目前我想到的最简单的解决方案是
- 使用活动 Shell 作为可见部分的 parent
- 为所有非活动部分 创建一个次要的不可见 Shell 作为 parent
- 如果可见部分发生变化,则使用
currentlyVisibleSection.setParent(backgroundShell)
将当前可见部分移至背景 Shell 并使用newVisibleSection.setParent(activeShell)
使所选部分可见
下一个精简示例说明了这个想法:
public class TestUI extends AbstractEntryPoint {
private Composite visibleSection;
private Shell backgroundShell;
public void createContents( Composite parent ) {
backgroundShell = new Shell();
//Implementation comes from other OSGI bundles
Composite dataSection = createDataSection(parent);
Composite settingsSection = createSettingsSection(backgroundShell);
visibleSection = dataSection;
Button dataButton = new Button(parent, SWT.PUSH);
dataButton.setText("Data");
dataButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (visibleSection!=dataSection) {
visibleSection.setParent(backgroundShell);
dataSection.setParent(parent);
visibleSection=dataSection;
parent.layout();
}
}
});
Button settingsButton = new Button(parent, SWT.PUSH);
settingsButton.setText("Data");
settingsButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (visibleSection!=settingsSection) {
visibleSection.setParent(backgroundShell);
settingsSection.setParent(parent);
visibleSection=settingsSection;
parent.layout();
}
}
});
}
}
显然我已经去掉了所有的布局和样式代码,而且它仍然需要一些工作才能让最终用户看起来体面。它确实需要我手动跟踪所有不同的部分,创建它们并管理它们,但这对我来说是可以接受的。所以总的来说,这几乎完成了我需要它做的事情,但感觉有点 "hackish".
问题
- 这种做事方式是否有一些重大缺陷或根本缺陷?
- 纯粹使用 Eclipse RAP 是否有更好的处理方式?
我也研究了一下使用 Eclipse workspaces/perspectives (Workbench),但这似乎给应用程序增加了大量的复杂性(更不用说最初的 learning-curve ),我宁愿避免它。特别是因为我不需要大部分功能。
StackLayout
是显示控件堆栈的推荐方式,一次只能显示一个控件。
下面的示例创建按钮区域以在父级顶部显示选择按钮("Data"、"Settings"、...),容器占用剩余的 space .所有部分都在使用 StackLayout
.
parent.setLayout( new GridLayout( 1, false ) );
Composite buttonArea = new Composite( parent, SWT.NONE );
buttonArea.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false ) );
Composite container = new Composite( parent, SWT.NONE );
container.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
StackLayout containerLayout = new StackLayout();
container.setLayout( containerLayout );
Composite dataSection = createDataSection( container );
Composite settingsSection = createDataSection( container );
选择侦听器代码告诉布局要显示哪个部分。
dataButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent event ) {
containerLayout.topControl = dataSection;
container.layout();
}
});
有关布局的更多信息,另请参阅这篇文章:https://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html
你走在正确的轨道上。不要使用 workbench(如您所说的 "workspaces/perspectives"),它添加的内容比您可能需要的要多得多。此外,该堆栈的某些部分可以在需要时独立使用。例如 JFace 查看器或核心命令。