Swing学习----------实现多个组件的绑定
来源:互联网 发布:mac最好的播放器 编辑:程序博客网 时间:2024/06/06 04:09
有时候,我们会有这么一种需求:在一个程序中两个位置有一种相同功能的组件,当我们改变其中一个组件的状态时,另一个组件的状态也需要随之改变。例如,在word中点击右键有复制,粘贴的功能,在菜单栏中的某个位置也有复制,粘贴的功能,当我们右键复制,然后可以通过菜单栏中的粘贴把结果显示,又或者通过菜单栏的复制,右键粘贴结果。大概意思就是这样了。下面讲解具体实现。
步骤如下:
1.定义一个Action类,继承于AbstractAction,并重写其中的actionPerformed方法
2.使用该类定义一个Action对象。
3.在所有需要相同功能的组件中,通过构造方法或者setAction,与该Action对象进行绑定。
下面将通过代码实现上述过程:
此时右键和菜单都实现了复制粘贴功能,并且实现了两个组件的绑定,当其中一个组件的状态改变时,另一个组件的状态也随之改变,效果这里就不便演示了。另外再附上一种写法,这种是使用匿名类的方法实现,并没有重新写类继承AbstractAction类,个人更倾向于使用这种方法,但是实现的功能一样。
下面将通过代码实现上述过程:
/** *继承AbstractActio的版本 */public class Menu2 {JFrame frm;JTextArea area;JScrollPane sp;JMenuBar menubar;JPopupMenu popupmenu;CopyAction copyaction;PasteAction pasteaction;JMenu filemenu,editmenu;JMenuItem open,save,copy,paste;public Menu2(){frm=new JFrame("菜单");frm.setSize(240, 180);frm.setLayout(null);area=new JTextArea();sp=new JScrollPane(area);sp.setBounds(0, 0, 240, 180);area.addMouseListener(new MouseAdapter(){public void mouseReleased(MouseEvent e){if(e.isPopupTrigger())popupmenu.show(area, e.getX(), e.getY());}});menubar=new JMenuBar();frm.setJMenuBar(menubar);filemenu=new JMenu("文件");open=new JMenuItem("打开");save=new JMenuItem("保存");editmenu=new JMenu("编辑");copy=new JMenuItem("复制");paste=new JMenuItem("粘贴");menubar.add(filemenu);filemenu.add(open);filemenu.addSeparator();filemenu.add(save);menubar.add(editmenu);editmenu.add(copy);editmenu.addSeparator();editmenu.add(paste);popupmenu=new JPopupMenu();JMenuItem c=new JMenuItem("复制");JMenuItem p=new JMenuItem("粘贴");popupmenu.add(c);popupmenu.addSeparator();popupmenu.add(p);/** * 此处要注意要new一个示例空间,否则copyaction对象和pasteaction对象没有指向 * 任何实例空间 */copyaction=new CopyAction();pasteaction=new PasteAction();/** * 四个组件都要绑定action */copy.setAction(copyaction);c.setAction(copyaction);paste.setAction(pasteaction);p.setAction(pasteaction);frm.add(sp);frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);}class CopyAction extends AbstractAction{/** * 注意此处是显示绑定的组件的标题,不写这个会导致组件没有名字 */public CopyAction(){super("复制");}public void actionPerformed(ActionEvent e){area.copy();}}class PasteAction extends AbstractAction{public PasteAction(){super("粘贴");}public void actionPerformed(ActionEvent e){area.paste();}}public static void main(String[] args) {new Menu2();}}
此时右键和菜单都实现了复制粘贴功能,并且实现了两个组件的绑定,当其中一个组件的状态改变时,另一个组件的状态也随之改变,效果这里就不便演示了。另外再附上一种写法,这种是使用匿名类的方法实现,并没有重新写类继承AbstractAction类,个人更倾向于使用这种方法,但是实现的功能一样。
public class MyMenu1 {JFrame frm;JTextArea area;JScrollPane sp;JMenuBar menubar;JPopupMenu popupmenu;JMenu filemenu,editmenu;JMenuItem open,save,copy,paste;private AbstractAction copyAciton;private AbstractAction pasteAction;public MyMenu1(){frm=new JFrame("菜单");frm.setSize(240, 180);frm.setLayout(null);area=new JTextArea();sp=new JScrollPane(area);sp.setBounds(0, 0, 240, 180);area.addMouseListener(new MouseAdapter(){public void mouseReleased(MouseEvent e){if(e.isPopupTrigger())popupmenu.show(area, e.getX(), e.getY());}});menubar=new JMenuBar();frm.setJMenuBar(menubar);filemenu=new JMenu("文件");open=new JMenuItem("打开");save=new JMenuItem("保存");editmenu=new JMenu("编辑");copy=new JMenuItem("复制");paste=new JMenuItem("粘贴");menubar.add(filemenu);filemenu.add(open);filemenu.addSeparator();filemenu.add(save);menubar.add(editmenu);editmenu.add(copy);editmenu.addSeparator();editmenu.add(paste);popupmenu=new JPopupMenu();JMenuItem c=new JMenuItem("复制");JMenuItem p=new JMenuItem("粘贴");popupmenu.add(c);popupmenu.addSeparator();popupmenu.add(p);copyAciton=new AbstractAction("复制"){public void actionPerformed(ActionEvent e){area.copy();}};pasteAction=new AbstractAction("粘贴"){public void actionPerformed(ActionEvent e){area.paste();}};paste.setAction(pasteAction);copy.setAction(copyAciton);p.setAction(pasteAction);c.setAction(copyAciton);frm.add(sp);frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setVisible(true);}public static void main(String[] args) {new MyMenu1();}}
阅读全文
1 0
- Swing学习----------实现多个组件的绑定
- AWT组件的Swing实现
- Swing系列-组件对齐方式的学习
- 关于swing界面组件的一些学习
- Swing各个组件学习
- 可测量SWING组件的标尺 - SWING组件
- JAVA学习Swing章节按钮组件JButton的简单学习
- JAVA学习Swing章节按钮组件JButton的简单学习
- Swing组件的打印
- Swing 的组件 使用
- Vue 组件实现表单的双向绑定
- SWING组件学习2:按钮
- 可实现JSCROLLPANE内VIEW最大化的工具 - SWING组件
- Swing中用GridBagConstraints和GridBagLayout实现组件重叠的效果
- Swing 实现简单的自定义不规则按钮组件
- Swing 实现简单的自定义不规则按钮组件2
- 简单画板的实现——Swing组件略述
- 分层Pane结构与Swing组件高级特性的实现
- linux 离线安装gcc
- java-map转bean
- POI 其他形状
- tomcat+nginx+redis实现均衡负载、session共享(二)
- 设计模式学习:建造者模式
- Swing学习----------实现多个组件的绑定
- 运行./configure后出现如下错误 checking for working aclocal... missing
- HDU1061 Rightmost Digit【快速模幂】
- PAT-A-1099. Build A Binary Search Tree (30)
- 网页中怎样禁止通过输入url直接访问
- J2EE通用后台管理系统 springmvc+mybatis+nginx+shiro+redis架构的session共享
- [UOJ 300][CTSC2017]吉夫特-扩展Lucas定理
- 订单系统框架整合,及代码
- java游戏服务器之网络层Netty 之ChannelPipeline