Swing 8多个组件移动

Posted 千秋邈矣独留我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类文件

 

以上是关于Swing 8多个组件移动的主要内容,如果未能解决你的问题,请参考以下文章

java Swing组件随着窗口拖动等比移动或等比放大

java的swing组件的使用

Java Swing:居中组件

图形界面设计

一个 Swing 组件不能添加到多个容器中吗?

使组件对 Swing 中的拖动不那么敏感