- 浏览: 61523 次
- 性别:
- 来自: 深圳
最新评论
-
zhylandroid:
...
JTable( 放在JScrollPane中 )中加入一行后, 然后让其获得焦点且滚动条自动下来 -
dkeagle:
太感谢了,太有用了,在网上查了两天资料了...
JTable( 放在JScrollPane中 )中加入一行后, 然后让其获得焦点且滚动条自动下来
Java Swing程序不像J2EE程序那样有框架有模式可遵,反倒显得很自由无所拘束,但如些一来反而显得程序代码杂乱无章,如果只是写个示例程序的话倒也无所谓,但随着代码的增多或过段时间在回首时就发现代码很不容易看懂,不以维护。我虽无大型Swing程序的经验,但平素喜爱用Swing写写工具程序以练练手,因此我以下是我的经验总结。下面以些图来表示
一个桌面级程序必然是以一个主界面展开的,在Swing中这个主界面是派生自JFrame的,其中有菜单、工具栏、状态栏、内容面板(contentPanel)和一些相应的按钮,这些界面元素即可以派生自某个类或调用Swing的现成类,但最后总要添加到界面中,而为了与用户交互,控件要和一个实现了Action接口的类绑定,因此在界面层中我分别实例化了ActionsManager和Functions对象,我专门写了一个ActionsManager类的用以管理程序中所有的Action接口的类,通过键值对集合把某个控件的动作与相应的控件绑定,当然你可能会觉得这很无聊,还不如在构造控件时直接将动作与之绑定就可以了,但这样做时很没有重复性,如果某个动作即要被按钮实现又要被菜单实现,还要被工具栏实现的话就要重复写三次代码,如果还要考虑其禁用与否就更麻烦了,因此我干脆将动作类统统封装在一个集合中统一调用,比如如下的代码
public class LoginActions { private MainPanel mainPanel; private LoginManager loginManager; private Map<String,LoginAction> mapActions; public LoginActions() { mapActions = new HashMap<String,LoginAction>(); new LoginAction("新建(N)","image/newfile.gif","image/tbnew.png",KeyEvent.VK_N,"ctrl N","new"){ public void actionPerformed(ActionEvent e) { mainPanel.newFile(); } }; new LoginAction("打开(O)...","image/open.gif","image/tbopen.png",KeyEvent.VK_O,"ctrl O","open"){ public void actionPerformed(ActionEvent e) { mainPanel.openFromFile(); } }; new LoginAction("保存(S)","image/save.gif","image/tbsave.png",KeyEvent.VK_S,"ctrl S","save"){ public void actionPerformed(ActionEvent e) { if(loginManager.isModifyFlag()) mainPanel.saveToFile(false); } }; new LoginAction("另存为(A)...",null,null,KeyEvent.VK_A,null,"saveas"){ public void actionPerformed(ActionEvent e) { if(loginManager.isModifyFlag()) mainPanel.saveToFile(true); } }; new LoginAction("导出(E)...",null,"image/tbexport.png",KeyEvent.VK_E,null,"export"){ public void actionPerformed(ActionEvent e) { mainPanel.exprotFile(); } }; new LoginAction("退出(X)",null,"image/tbexit.png",KeyEvent.VK_X,"ctrl alt X","exit"){ public void actionPerformed(ActionEvent e) { mainPanel.ExitApplication(); } }; new LoginAction("复制(C)","image/copy.gif",null,KeyEvent.VK_C,"ctrl C","copy"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.editMenuCopy(); } }; new LoginAction("粘贴(P)","image/paste.gif",null,KeyEvent.VK_P,"ctrl V","paste"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.editMenuPaste(); } }; new LoginAction("剪切(X)","image/cut.gif",null,KeyEvent.VK_X,"ctrl X","cut"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.editMenuCut(); } }; new LoginAction("清除输入(R)",null,null,KeyEvent.VK_R,null,"reinput"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.resetInput(); } }; new LoginAction("新增分类(A)",null,null,KeyEvent.VK_A,null,"addType"){ public void actionPerformed(ActionEvent e) { mainPanel.showTypeDlg(true); } }; new LoginAction("删除分类(D)",null,null,KeyEvent.VK_D,null,"delType"){ public void actionPerformed(ActionEvent e) { mainPanel.deleteType(); } }; new LoginAction("修改分类(M)",null,null,KeyEvent.VK_M,null,"modifyType"){ public void actionPerformed(ActionEvent e) { mainPanel.showTypeDlg(false); } }; new LoginAction("新增记录(D)",null,null,KeyEvent.VK_D,null,"addLogin"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.addLogin(); } }; new LoginAction("删除记录(E)",null,null,KeyEvent.VK_E,null,"delLogin"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.deleteLogin(); } }; new LoginAction("修改记录(O)",null,null,KeyEvent.VK_O,null,"modifyLogin"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.modifyLogin(); } }; new LoginAction("查找(F)","image/tbfind.png",null,KeyEvent.VK_F,null,"findLogin"){ public void actionPerformed(ActionEvent e) { mainPanel.rightPanel.find(); } }; new LoginAction("转至地址(L)",null,null,KeyEvent.VK_L,null,"goURL"){ public void actionPerformed(ActionEvent e) { mainPanel.bottomPanel.goUrl(); } }; new LoginAction("刷新(U)","image/refresh.gif","image/tbudpate.png",KeyEvent.VK_U,null,"refresh"){ public void actionPerformed(ActionEvent e) { mainPanel.updatePanelUI(); } }; new LoginAction("程序设置(S)...","image/setup.gif","image/tbOption.png",KeyEvent.VK_S,null,"setup"){ public void actionPerformed(ActionEvent e) { mainPanel.showSetupDlg(); } }; new LoginAction("关于(A)...","image/about.gif","image/tbHelp.png",KeyEvent.VK_A,null,"about"){ public void actionPerformed(ActionEvent e) { mainPanel.showAboutDlg(); } }; } public Action getAction(String command) { return mapActions.get(command); } public void setMainPanel(MainPanel mainPanel) { this.mainPanel = mainPanel; } public void setLoginManager(LoginManager loginManager) { this.loginManager = loginManager; } abstract class LoginAction extends AbstractAction{ public LoginAction(String name,String icon,String bigIcon,int memKey,String stroke,String command) { this.putValue(NAME, name); if(icon!=null) this.putValue(Action.SMALL_ICON, new ImageIcon(this.getClass().getClassLoader().getResource(icon))); else this.putValue(Action.SMALL_ICON, new ImageIcon(this.getClass().getClassLoader().getResource("image/mnuNullIcon.gif"))); if(bigIcon!=null) this.putValue(Action.LARGE_ICON_KEY, new ImageIcon(this.getClass().getClassLoader().getResource(bigIcon))); if(memKey!=0) this.putValue(Action.MNEMONIC_KEY, memKey); if(stroke!=null) this.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(stroke)); this.putValue("command", command); mapActions.put(command, this); } } }
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Greentea107/archive/2010/11/04/5988178.aspx
发表评论
-
curtain
2013-04-01 16:45 0curtain -
jlayer
2013-03-26 18:13 0jlayer pane. -
swing网站
2013-03-01 15:44 0(2009年4月2日更新) 最近在网上找到了一些比 ... -
aasss
2012-08-03 18:09 0aasss -
关于swing的文章
2012-07-30 15:50 0http://blog.csdn.net/mylxiaoyi/ ... -
vista button
2012-06-12 20:14 0import java.awt.AlphaComposite; ... -
database demo
2012-06-09 17:17 0kkk -
全局键盘事件
2012-06-06 10:19 1253KeyboardFocusManager manager = ... -
sssfw
2012-05-04 20:56 0http://www.byywee.com/page/M0/S ... -
swingtexiao
2012-05-04 20:00 0swingtexiao -
sss
2012-04-28 18:11 0sss -
使用annotation获取实体类注释
2012-04-11 18:57 0使用annotation获取实体类注释 -
自定义scrollbar
2012-04-11 18:49 0自定义scrollbar -
自定义绘制按钮
2012-04-11 18:47 0自定义绘制按钮 -
2012年4月6日
2012-04-06 18:48 02012年4月6日 -
批量缩放图片工具
2012-03-28 19:13 0挺好用 -
工作文档
2012-03-24 18:17 0import java.util.ArrayList; im ... -
test
2012-03-23 17:45 1tset -
A星算法
2012-03-23 15:20 1203A星算法 -
aasss
2012-03-21 18:58 1aaaaa
相关推荐
uipath操作版本19.4.4,如果不是这个版本可以尝试修改project.json文件
Ctrl +单击文件夹项目-在选项卡中打开所有书签Alt +单击Bookmakr项目-打开并删除版本0.5.1添加URL显示添加选项页添加删除和重命名文件夹Mod编辑和删除UI Mod搜索框和Search Item UI Ver 0.5 0添加快捷键快捷键。 ...
本主题聚焦于如何在ListView的Item中实现单个动画的实时执行、暂停,并确保在更新UI时不会发生错位。 首先,我们需要理解ListView的工作原理。ListView通过复用机制(ViewHolder模式)来提高性能,当用户滚动时,...
Element UI 是一个基于 Vue.js 的开源 UI 组件库,它为开发者提供了丰富的界面组件,用于构建优雅的前端应用。这个“element-ui.rar”压缩包包含了 Element UI 的核心库,是开发人员快速搭建企业级 Web 应用的重要...
开发者可以通过设置UITabBarItem的标题、图像以及选中状态图像来自定义各个标签页的外观。此外,通过调整uitabbarcontroller的属性,可以实现如隐藏底部tabbar、自定义选中效果等功能。 App图标和启动画面是用户...
`ConversionListItem.java`根据`Res/layout/conversation_list_item.xml`的定义,控制每个消息条目的显示,包括不同状态下的背景颜色、文字显示等,并实现了`checkable`接口,允许用户多选消息。 这个分析揭示了...
- 在`res/drawable`目录下创建新的XML文件,定义动画序列,可以使用`<animation-list>`标签结合`<item>`标签来实现帧动画。 - 在`res/anim`目录下创建XML文件,定义动画的属性,如动画时长、延迟、平滑度等,可以...
console.log(ui.item.value); } }); }); ``` 4. **自定义配置**:`autocomplete` 方法接受一个配置对象,其中 `source` 是最重要的属性,指定了数据来源。其他可选配置包括 `minLength`(最小输入字符数)、`...
这通常涉及继承`Canvas`类并重写`paint()`方法,或者使用`Form`和`Item`的组合。自定义组件可以实现复杂的交互逻辑,比如可拖动的滑块、可旋转的选择器等。自定义组件的关键在于理解绘图流程和事件处理机制,以及...
.ui-menu-item a { background-color: #yourCustomColor; } ``` ### 事件处理 jQuery UI 提供了丰富的事件接口,使得开发者可以监听并响应下拉菜单的各种状态变化。比如,监听菜单打开和关闭的事件: ```...
### iOS UI基础控件常用方法探微 #### 一、UIImageView 控件详解 **1.1 UIImageView 显示问题** 在 iOS 开发过程中,经常会遇到 UIImageView 的显示问题。默认情况下,若未设置 UIImageView 的尺寸,该控件将自动...
SwiftUI是Apple在2019年WWDC上推出的新一代UI框架,它为iOS、iPadOS、macOS、watchOS和tvOS等平台提供了声明式编程方式来构建用户界面。在SwiftUI 1.0中,开发人员经常会遇到一个需求,即在应用启动或者根据用户操作...
var selectedOption = ui.item.value; console.log("用户选择了:" + selectedOption); }); ``` 对于更复杂的场景,例如需要多级或者分组的下拉菜单,可以通过 HTML 的 `<optgroup>` 标签来实现。同时,你还可以...
【标题】"MyUI.zip" 是一个包含了UI控件库的压缩文件,主要针对MFC(Microsoft Foundation Classes)框架设计,特别关注"MyUI-from-list-item"这一特定组件。这个库可能是一个开发者为了方便其他程序员在开发Windows...
Android UI 设计按钮美化 Android UI 设计中,按钮美化是非常重要的一方面。 buttons 在 Android 中是一个非常常见的控件,但是如果不加以美化,按钮的外观会显得很丑。其实,美化按钮并不是什么难事儿,简单地说,...
SwiftUI LazyVGrid和LazyHGrid 自定义对齐。1、垂直网格容器LazyVGrid。2、网格容器GridItem。3、生产数组 var gridData: [Int] { data.count%2 == 1 ? data.dropLast() : data }
3. **循环结构**: 支持`each`循环,用于遍历数组或对象,如`(data, function(item) { #>...); #>`。 4. **函数调用**: 可以在模板中调用JavaScript函数,对数据进行处理后再渲染。 5. **HTML编码**: 默认情况下,...
在 foreach 里的 item 变量需要调整为 datarow,才可以。 整个流程及运行结果:首先,我们获取了一个数据表,然后设置了行变量,接着写筛选条件,最后使用foreach循环将筛选后的行数据输出。 UiPath Datatable ...
`menu('select', item)` 选择指定的菜单项。 **三、示例代码解析** 在 `jquery-easyui-1.2.6` 压缩包中,你可能会找到以下类型的示例代码: 1. **DataGrid 示例**: 展示如何使用 DataGrid 组件加载数据、定义列、...