`

SWT如何实现面板内容切换,解决方案(原创-logoc)

阅读更多

       最近一直在做软件,采用了SWT插件,经过近1个多月的使用,对SWT有了初步的认识,今日刚刚解决SWT面板如实现内容切换,而非窗口切换做一些分享,希望对各位有所帮助!

       建议入门同学读一下<理解SWT布局>这篇文章,多读几次也无妨。这是我的感受。

       现在切入正题,如何解决面板内容切换问题!

       在CSDN、百度、google我查了相关的资料,相关资料很少,不知道是我搜索关键字有问题还是其他原因。这个问题困扰我很久,网上提供的使用CTabItem的较多,但这是我想要的效果。我要的效果,是通过按钮实现内容切换而且,实现不同面板在不同的类中进行设计。经过反复调试测验,发现当我现在一个composite面板,调用setVisible(true/false)方法来实现面板的转换,但是发现不行,布局有问题,最后发现使用StackLayout()叠加布局类来实现。所有的面板都叠放在一起,通过按钮将需要的面板置顶即可。总体思路就是这样。如有描述错误,贻笑大方还请各位指点。

实现代码:可独立运行

 

package com.hbaas.main;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

import com.hbaas.composite.SystemSetComposite;

public class SystemFrame {

 protected Shell shell;
 protected Button systemBt ;
 protected Button nhinfoBt ;
 protected Composite systemComp;
 protected Composite nhinfoComp;
 protected StackLayout stackLayout = new StackLayout();
 protected Composite displayComp;
 /**
  * Launch the application.
  * @author 李亮

  * @param Composite
  */
 public static void main(String[] args) {
  try {
   SystemFrame window = new SystemFrame();
   window.open();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * Open the window.
  */
 public void open() {
  Display display = Display.getDefault();
  createContents();
  shell.open();
  shell.layout();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch()) {
    display.sleep();
   }
  }
 }

 /**
  * Create contents of the window.
  */
 protected void createContents() {
  shell = new Shell(SWT.MIN | SWT.CLOSE);
  shell.setSize(1200, 800);
  shell.setLocation(Display.getCurrent().getClientArea().width/2 - shell.getShell().getSize().x/2, Display.getCurrent().getClientArea().height/2 - shell.getSize().y/2);
  
  shell.setText("湖北省xxxx系统");
  shell.setImage(new Image(null,"./icons/log.ico")); 
  shell.setLayout(new GridLayout());
  SashForm sashForm = new SashForm(shell, SWT.NONE);
 
  sashForm.setOrientation(SWT.VERTICAL);
  {
   GridData gridData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
   gridData.widthHint = 1185;
   gridData.heightHint = 755;
   sashForm.setLayoutData(gridData);
  }
  
  final Composite controlComp = new Composite(sashForm,SWT.NONE);
  controlComp.setBackgroundImage(new Image(shell.getDisplay(),"./icons/top.gif"));
  final GridData controlGridata = new GridData(SWT.FILL,SWT.CENTER);  
  {
   systemBt = new Button(controlComp, SWT.NONE);
   systemBt.setBounds(579, 24, 100, 60);
   systemBt.setText("系统设置");

   nhinfoBt = new Button(controlComp, SWT.NONE);
   nhinfoBt.setBounds(739, 24, 100, 60);
   nhinfoBt.setText("农户信息");

   Button dataBt = new Button(controlComp, SWT.NONE);
   dataBt.setBounds(889, 24, 100, 60);
   dataBt.setText("数据交换");
   Button aboutBt = new Button(controlComp, SWT.NONE);
   aboutBt.setBounds(1040, 24, 100, 60);
   aboutBt.setText("关于");
  }
  controlComp.setLayoutData(controlGridata);

//  systemBt.addSelectionListener(new CompSelectionListener());
//  nhinfoBt.addSelectionListener(new CompSelectionListener());
  
  displayComp = new Composite(sashForm,SWT.NONE);
  displayComp.setLayout(stackLayout);
  
//  systemComp = createSystemComp(displayComp);
  systemComp = new SystemSetComposite().createFrame(displayComp);
  nhinfoComp = createNhInfoComp(displayComp);  
  stackLayout.topControl = systemComp;
 
  
  Listener listener = new Listener(){
   public void handleEvent(Event event) {
    if (event.widget == systemBt){
     stackLayout.topControl = systemComp;
//     System.out.println(systemBt.getText());
    }else if(event.widget == nhinfoBt){
     stackLayout.topControl = nhinfoComp;
//     System.out.println(nhinfoBt.getText());
    } 
    displayComp.layout();
   }   
  };
  systemBt.addListener(SWT.Selection , listener);
  nhinfoBt.addListener(SWT.Selection, listener); 
  sashForm.setWeights(new int[] {118, 681});
 }
 private Composite createSystemComp(Composite displayComp) {
  Composite comp = new Composite(displayComp, SWT.NONE);
  comp.setLayout(new GridLayout());
  new Label(comp, SWT.NONE).setText("系统面板");
  return comp; 
 } 
 private Composite createNhInfoComp(Composite displayComp) {
  Composite comp = new Composite(displayComp, SWT.NONE);
  comp.setLayout(new GridLayout());
  new Label(comp, SWT.NONE).setText("农户信息面板");
  return comp;  
 }
}

分享到:
评论
2 楼 logoc 2012-06-27  
dotjar 写道
SystemSetComposite在哪里?

这个是一个新的面板,你可以自己定义的。
1 楼 dotjar 2012-06-08  
SystemSetComposite在哪里?

相关推荐

    公司漂亮的标识LOGO

    此外,还要考虑在黑白、单色以及不同颜色方案下的效果。 4. **反映品牌价值**:LOGO应该传达公司的核心价值和理念。例如,耐克的勾形LOGO象征着速度和动力,与品牌所倡导的运动精神相吻合。 5. **色彩选择**:色彩...

    CH02- CMD Machine CC.rar_adaptive control_dc fuzzy_dc machine

    dc machine control using fuzzy logoc

    银行logo.rar(117个)

    在中国,银行标识是各个金融机构品牌形象的重要组成部分,它们不仅代表着银行的独特风格和文化,还承载着银行的信誉和服务理念。"银行logo.rar(117个)"这个压缩包文件收集了全国117家银行的官方标志,对于设计、研究...

    AD19珍藏元件库(建议18版本以上使用)

    标签“AD”直接关联到Altium Designer软件,表明这个压缩包的内容是专门为该软件准备的。在使用这个元件库时,用户需要确保他们已经安装了至少版本18的Altium Designer,因为某些新特性或改进可能在旧版本中不支持。...

    神奇宝贝(PokemonGo)基于Jetpack+MVVM+Repository设计模式+Data.zip

    神奇宝贝(PokemonGo)基于Jetpack+MVVM+Repository设计模式+Data

    用于试用 Dev Containers 的 Python 示例项目.zip

    用于试用 Dev Containers 的 Python 示例项目试用开发容器Python开发容器是一个具有明确定义的工具/运行时堆栈及其先决条件的运行容器。您可以使用GitHub Codespaces或Visual Studio Code Dev Containers试用开发容器。这是一个示例项目,您可以通过几个简单的步骤尝试任一选项。我们还有各种其他vscode-remote-try-*示例项目。注意如果您已经有代码空间或开发容器,则可以跳至“要尝试的事情”部分。设置开发容器GitHub Codespaces请按照以下步骤在 Codespace 中打开此示例单击代码下拉菜单。单击Codespaces选项卡。单击主屏幕上的“创建代码空间”。有关创建代码空间的更多信息,请访问GitHub 文档。VS Code 开发容器如果您已安装 VS Code 和 Docker,则可以单击上方或此处的徽章开始使用。单击这些链接将导致 VS Code 根据需要自动安装 Dev Containers 扩展,将源代码克隆到容器卷中,并启动开发容器以供使用。按

    springboot vue3前后端分离.zip

    springboot vue3前后端分离

    数学建模-神经网络算法 lecture 11 线性随机系统辨识示例 共9页.pptx

    数学建模-神经网络算法 lecture 11 线性随机系统辨识示例 共9页.pptx

    优质粳稻生产技术规程.docx

    优质粳稻生产技术规程.docx

    所有算法均在 Python 3 中实现,是 hacktoberfest2020 的一个项目 - 没有针对 hacktoberfest 2021 的问题或 PR.zip

    算法 - Python 目录灵感与动力贡献指南从这里开始所有算法均用 Python 3 实现(用于教育)这些实现仅用于学习目的。如果您想贡献更有效的解决方案,请随时打开问题并提交您的解决方案。灵感你可以在LeetCode 算法中寻找要实现的算法若要贡献,请确保算法尚未提交!请确保在您的 PR 中添加问题编号。贡献指南文件夹和文件请确保你的文件位于 -Folder 中LeetCode,并且命名如下 0001_TwoSum.py-> LeetCode 问题的 4 位数字、下划线、LeetCodeName开放问题当您打开问题时,请确保问题尚未实现(查看代码/Leetcode 以获取问题编号)。现有问题打开的问题将被关闭,并且对此问题的 PR 被标记为垃圾邮件 。打开问题的贡献者将被优先分配到该问题。如果大约 7 天内没有 PR,则问题将分配给另一个贡献者。拉取请求只有与问题相结合并符合命名约定(参见文件夹和文件)的 Pull 请求才会被合并!如果 PR 中没有加入问题,您的 PR 将被标记为垃圾邮件并关闭。如果您的代码未通

    用于接收和交互来自 Slack 的 RTM API 的事件的框架.zip

    用于接收和交互来自 Slack 的 RTM API 的事件的框架python-rtmbot此项目不再处于积极开发阶段。如果您刚刚开始,我们建议您先查看Python SDK。如果您一直在使用此项目,我们只会解决关键问题(例如安全问题),但我们建议您计划迁移到 Python SDK。您仍然可以提交问题并向我们寻求帮助! 如果您有兴趣在未来维护此软件包,请联系我们 一个用 Python 编写的 Slack 机器人,通过 RTM API 连接。Python-rtmbot 是一个机器人引擎。任何了解Slack API和 Python的人都应该熟悉插件架构。配置文件格式为 YAML。该项目目前处于 1.0 之前的版本。因此,您应该计划不时进行重大更改。对于任何重大更改,我们将在 1.0 之前的版本中调整次要版本。(例如 0.2.4 -> 0.3.0 意味着重大更改)。如果稳定性很重要,您可能希望锁定特定的次要版本)与 webhook 的一些区别不需要网络服务器来接收消息可以回复用户的直接消息以 Slack 用户(或机器人)身份登录机器人用户必须被邀请加入频道

    基于django的音乐推荐系统.zip

    基于django的音乐推荐系统.zip

    北京理工大学<Python机器学习应用>超详细学习笔记和代码注释(未完待续).zip

    北京理工大学<Python机器学习应用>超详细学习笔记和代码注释(未完待续)

    kernel-5.15-rc7.zip

    kernel-5.15-rc7.zip

    神经网络-DenseNet网络结构

    神经网络-DenseNet网络结构

    rbac组件(基于角色的权限控制).zip

    rbac组件(基于角色的权限控制)

    C++ Vigenère 密码(解密代码)

    C++ Vigenère 密码(解密代码)

    数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 杭州消防设置-对杭州市消防局设置的研究 共8页.pdf

    数学建模培训资料 数学建模实战题目真题答案解析解题过程&论文报告 杭州消防设置-对杭州市消防局设置的研究 共8页.pdf

    老年用品产品推广目录分类表.docx

    老年用品产品推广目录分类表.docx

    毕设源码-基于Python的期货程序化交易系统的设计与实现_jhypi-期末大作业+说明文档.rar

    本项目是基于Python的期货程序化交易系统的设计与实现,旨在为计算机相关专业学生提供一个实践性强、贴近实际应用场景的项目案例。通过这一项目,学生们能够深入了解程序化交易的基本原理和实现方法,同时锻炼自身的编程技能、数据分析能力以及金融市场的洞察力。 项目的主要功能包括:自动收集和处理市场数据、基于预设策略进行交易决策、实时执行交易指令、监控交易风险以及生成详细的交易报告。系统采用模块化设计,主要包括数据采集模块、策略执行模块、交易执行模块和风险管理模块,各个模块之间通过明确的接口进行交互。项目采用的编程语言为Python,利用其强大的数据处理库和机器学习库,保证了系统的灵活性和扩展性。开发这一项目的目的是让学生们在实践中学习和掌握程序化交易的核心技术,提升其在金融科技领域的就业竞争力。

Global site tag (gtag.js) - Google Analytics