【Swing 8】多个组件移动

  上次介绍了单个按钮的拖动原理,今天来个联合作战,实现之前一直以为要制造监听器

的误区,加到各个组件上,结果昨天深夜偶然想出了解决方法。而且是超级简单的那种,唉

! 有时候,想多了真不见得是好事。

  单个组件地拖动: http://www.cnblogs.com/Ruby517/p/6507001.html

  

其实要让多个组件都能响应拖动事件。那么给它们写一个带有拖动方法的父类即可。

  这次,我们把源代码分成几个类文件, 以后其它要用到图形界面的就可以直接调用了,不

过,在此之前,先解决一个问题。由于JFrame类的add()方法只能添加JComponent类的对

象,所以我们在定义好各组件的类后,要返回组件(JComponent)自身。目前只想到一个解

决方法, 就是定义一个返回值的函数;

当然,对于使用JFrame类的Gui类来说, 它不用被别人添加, 所以除了返回JFrame, 来

使用JFrame 从父类继承的方法外(JComponent类的方法),还有就是覆盖其父类的方法, 比

如setSize(); setText()等。缺点就是要覆盖的方法TM多, 所以只能覆盖几个常用的。

1.  这是第一种方法, 比较简单

2.方法二比较麻烦,只覆盖了几个常用的方法, 写出来让大家参考参考:

 1 package demo;
 2
 3 import java.awt.*;
 4 import javax.swing.*;
 5 import java.awt.event.*;
 6
 7 public class Gui {
 8     JFrame f;
 9     public Gui() {
10         f = new JFrame();
11         f.setSize(800, 600);
12         screenCentered();
13     }
14     public Gui(String title) {
15         this();                 // this()用于调用其它构造函数, 如有参数则带参
16         f.setTitle(title);
17     }
18     public void screenCentered() {
19         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
20         int screenW = screenSize.width;
21         int screenH = screenSize.height;
22         int frameW = f.getWidth();
23         int frameH = f.getHeight();
24         f.setLocation(screenW / 2 - frameW / 2, screenH / 2 - frameH / 2);
25         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
26         f.setVisible(true);
27     }
28     public void setLayout(LayoutManager manger) {
29         f.setLayout(manger);
30     }
31     public void set(int width, int height) {
32         f.setSize(width, height);
33         screenCentered(); // 因为重设了窗口大小, 所以要读取新的尺寸去使窗口居中
34     }
35     public void add(JComponent component) {
36         f.add(component);
37         f.validate();          // 或用f.setVisible(true), add()新组件然后立即刷新
38     }
39     public void add(String location, JComponent component) {
40         f.add(location, component);
41         f.validate();
42     }
43 }

Gui类文件

时间: 2024-09-29 23:01:40

【Swing 8】多个组件移动的相关文章

Swing学习笔记1-----Swing组件类的层次

1.  从结构上划分 Swing 组件类分为两种,一种是JComponent类,一种是Windows类.其中windows类包含的是一些可以独立显示的组件,而JComponent类包含的是不可以独立显示的组件. 什么是可独立显示的组件和不可独立显示的组件? 可独立显示的组件:当运行一个程序时,可独立显示的组件无需在其他组件上即可显示,即它可以直接显示出来,例如JFrame类. 不可独立显示的组件:运行时,必须依靠可独立显示的组件才能将其显示出来,如JLabel类,JButton类,得托付在类似于

【Java Swing探索之路系列】之三:Java Swing布局管理器组件

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 一 BorderLayout BorderLayout是一种简单的布局策略,可以将其看作一个组件.它把容器分为东.南.西.北.中5个区域,每个组件将占据某个区域.而 这5个区域分别被命名为NORTH, WEST, EAST, CENTER, SOUTH,它们都被定义为静态 常量.静态常量可以直接引用,如

JavaSE Swing程序结构、组件分类及基本规则

{相关信息}1. 程序结构Swing 的程序设计一般可按照以下流程进行:(1)通过 import 引入 swing 包.(2)设置 GUI 的“外观界面风格”.(3)创建顶层容器.(4)创建按钮和标签等组件.(5)将组件添加到顶层容器.(6)在组件周围添加边界.(7)进行事件处理. 2. 组件分类Jcomponent 类派生于 Container 类.并不是 Swing 的所有组件都继承了 JComponent 类,凡是派生于 Container 类的组件都可以作为容器使用.Swing 组件从功

第13章 Swing程序组件 JFrame

JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器. 在开发应用程序时可以通过继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件.JFrame在程序中的语法格式如下: JFrame jf=new JFrame(title);  // jf: JFrame类的对象 Container container=jf.getContentPane();  //container: Containe

Swing学习篇 API [一]Swing常用组件

1.按钮(Jbutton) Swing中的按钮是Jbutton,它是javax.swing.AbstracButton类的子类,swing中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮. 在JButton中有如下几个比较常用的构造方法. JButton(Icon icon): 按钮上显示图标. JButton(String text): 按钮上显示字符. JButton(String text,Icon icon): 按钮上既显示图标又先施字符. J

Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的产品! 有机会作Swing软件的开发,让我非常有感觉! 呵呵,希望有机会能够用Java3D编写软件,那种感觉一定更棒! Java和Swing都是杰作.我这个人对别人一向很挑剔的,能够得到我由衷地赞誉,可想而知它们有多优秀了.奇怪的是,它们居然一直都无法占领桌面市场.有人说这是技术的原因.我认为这应该

Java Swing 使用总结(转载)

随笔转载自:此去经年ぢ 地址:http://www.cnblogs.com/FLFL/p/5369756.html 1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 2. 图形交互方式 ava提供了专业的API用于开发图形用户界面 GUI--> Graphic  User   Interface   将要了解GUI API的框架结构,以及GUI组

JavaSE AWT与Swing的区别

AWT 组件具有平台相关性,它是系统对等类的实现.而 Swing 组件在不同平台具有一致性的表现,另外还可以提供本地系统不支持的一些特征,因此 Swing 比 AWT 的组件实用性更强.Swing 采用了 MVC(Model-View-Controller,即模型-视图-控制)设计模式. (1)组件的多样化Swing 的基础是 AWT,它提供了比 AWT 更多的图形界面组件.Swing 组件的类名都是以字母”J“开头, 除AWT 具有的基本组件(按钮JButton.标签JLabel.复选框JCh

GUI编程(二)----- 容器组件

JFrame 框架窗体 JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以讲JFrame看作是承载这些Swing组件的容器.JFrame窗体具有最大化.最小化和关闭按钮. 常用方法 1.构造方法 JFrame() 构造一个初始时不可见的新窗体. JFrame(String title) 创建一个新的.初始不可见的.具有指定标题的 Frame. 注意:构造方法创建出来的窗体式默认隐藏的. 2.普通方法 Container getContentPane() 返回此窗体的 conte

【Swing】理解Swing中的事件与线程

talk is cheap , show me the code. Swing中的事件 事件驱动 所有的GUI程序都是事件驱动的.Swing当然也是. GUI程序不同于Command Line程序,一个很大的区别是程序执行的驱动条件:命令行程序是接受用户输入的文本参数,对命令解析,然后通过类似switch的选择来执行不同的功能模块.而GUI程 序就不一样了.GUI程序由界面元素组成,如Button,CheckBox,TextArea,等等.用户操作不同的组件,就会引发不同的事件,然后, 程序编写