最近一直在做软件,采用了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;
}
}
分享到:
相关推荐
此外,还要考虑在黑白、单色以及不同颜色方案下的效果。 4. **反映品牌价值**:LOGO应该传达公司的核心价值和理念。例如,耐克的勾形LOGO象征着速度和动力,与品牌所倡导的运动精神相吻合。 5. **色彩选择**:色彩...
dc machine control using fuzzy logoc
在中国,银行标识是各个金融机构品牌形象的重要组成部分,它们不仅代表着银行的独特风格和文化,还承载着银行的信誉和服务理念。"银行logo.rar(117个)"这个压缩包文件收集了全国117家银行的官方标志,对于设计、研究...
uniapp实战商城类app和小程序源码,包含后端API源码和交互完整源码。
本课程是 PHP 进阶系列之 Swoole 入门精讲,系统讲解 Swoole 在 PHP 高性能开发中的应用,涵盖 协程、异步编程、WebSocket、TCP/UDP 通信、任务投递、定时器等核心功能。通过理论解析和实战案例相结合,帮助开发者掌握 Swoole 的基本使用方法及其在高并发场景下的应用。 适用人群: 适合 有一定 PHP 基础的开发者、希望提升后端性能优化能力的工程师,以及 对高并发、异步编程感兴趣的学习者。 能学到什么: 掌握 Swoole 基础——理解 Swoole 的核心概念,如协程、异步编程、事件驱动等。 高并发处理——学习如何使用 Swoole 构建高并发的 Web 服务器、TCP/UDP 服务器。 实战项目经验——通过案例实践,掌握 Swoole 在 WebSocket、消息队列、微服务等场景的应用。 阅读建议: 建议先掌握 PHP 基础,了解 HTTP 服务器和并发处理相关概念。学习过程中,结合 官方文档和实际项目 进行实践,加深理解,逐步提升 Swoole 开发能力。
matlab齿轮-轴-轴承系统含间隙非线性动力学 基于matlab的齿轮-轴-轴承系统的含间隙非线性动力学模型,根据牛顿第二定律,建立齿轮系统啮合的非线性动力学方程,同时也主要应用修正Capone模型的滑动轴承无量纲化雷诺方程,利用这些方程推到公式建模;用MATLAB求解画出位移-速度图像,从而得到系统在不同转速下的混沌特性,分析齿轮-滑动轴承系统的动态特性 程序已调通,可直接运行 ,关键词:Matlab;齿轮-轴-轴承系统;含间隙非线性动力学;牛顿第二定律;动力学方程;修正Capone模型;无量纲化雷诺方程;位移-速度图像;混沌特性;动态特性。,基于Matlab的齿轮-轴-轴承系统非线性动力学建模与混沌特性分析
2024年移动应用隐私安全观测报告.pdf
本电影评论网站管理员和用户。管理员功能有个人中心,用户管理,电影类别管理,电影信息管理,留言板管理,论坛交流,系统管理等。用户可以对电影进行评论。因而具有一定的实用性。本站是一个B/S模式系统,采用SSM框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得电影评论网站管理工作系统化、规范化。 本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高电影评论网站管理效率。 关键词:电影评论网站;SSM框架;MYSQL数据库 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1 MYSQL数据库 2 2.2 B/S结构 3 2.3 Spring Boot框架简介 4 3系统分析 4 3.1可行性分析 4 3.1.1技术可行性 4 3.1.2经济可行性 5 3.1.3操作可行性 5 3.2系统性能分析 5 3.2.1 系统安全性 5 3.2.2 数据完整性 6 3.3系统界面分析 6 3.4系统流程和逻辑 7 4系统概要设计 8 4.1概述 8 4.2系统结构 9 4.
2023-04-06-项目笔记-第四百三十六阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.434局变量的作用域_434- 2025-03-13
基于STM32的流量计智能流速流量监测、水泵报警系统(泵启动 1100027-基于STM32的流量计智能流速流量监测、水泵报警系统(泵启动、阈值设置、LCD1602、超阈值报警、proteus) 功能描述: 基于STM32F103C8单片机实现的智能流速、流量,流量计设计 实现的功能是通过信号发生器模拟齿轮传感器,检测流量的大小,同时计算流过液体的总容量 可以设置最大流过的总容量,当超过设定值后通过蜂鸣器与LED灯指示 当没有超过则启动水泵控制电路带动液体流动 1、流速检测 2、流量统计 3、阈值显示与设置(通过按键实现阈值的调节或清零) 4、水泵启动 5、超阈值报警 有哪些资料: 1、仿真工程文件 2、PCB工程文件 3、原理图工程文件 4、源代码 ,核心关键词: 基于STM32的流量计; 智能流速流量监测; 水泵报警系统; 阈值设置; LCD1602; 超阈值报警; Proteus仿真; STM32F103C8单片机; 齿轮传感器; 信号发生器; 流量统计; 蜂鸣器与LED灯指示; 水泵控制电路。,基于STM32的智能流量监测与报警系统(阈值可调、流速与流量监
(灰度场景下的平面、海底、船、受害者)图像分类数据集【已标注,约1100张数据】 数据经过预处理,可以直接作为分类网络输入使用 分类个数【4】:平面、海底、船、受害者【具体查看json文件】 划分了训练集、测试集。存放各自的同一类数据图片。如果想可视化数据集,可以运行资源中的show脚本。 图像分类、分割网络改进:https://blog.csdn.net/qq_44886601/category_12858320.html 计算机视觉完整项目:https://blog.csdn.net/qq_44886601/category_12816068.html
arkime无geo下的oui文件
人脸识别项目实战
人脸识别项目实战
CAD 2025 二次开发dll
人脸识别项目源码实战
c语言学习
基于扩张状态观测器eso扰动补偿和权重因子调节的电流预测控制,相比传统方法,增加了参数鲁棒性 降低电流脉动,和误差 基于扩张状态观测器eso补偿的三矢量模型预测控制 ,基于扩张状态观测器; 扰动补偿; 权重因子调节; 电流预测控制; 参数鲁棒性; 电流脉动降低; 误差降低; 三矢量模型预测控制,基于鲁棒性增强和扰动补偿的电流预测控制方法
c语言学习
UE开发教程与学习方法记录.zip