java中解決組件重疊的問題(例如鼠標移動組件時)


java中解決組件覆蓋的問題!
     有時候在移動組件的時候會出現兩個組件覆蓋的情況,但是你想讓被覆蓋的組件顯示出來或者不被覆蓋!
在設計GUI時已經可以定義組件的疊放次序了(按擺放組件的先后順序)。
真正麻煩的是響應哪個組件,這就要創建一個鏈表,把組件對象按順序存起來,響應事件時掃描這個鏈表,按
鏈表中的先后順序選擇響應組件對象。
     所以要想滿足自己的需求,那么在添加組件的時候就要注意順序就好了!

     另外如果不想用上面的方法,那么你就采用JLayeredPane這個類,分層面板可以幫助你解決覆蓋中的問題!

例如moveToFront(Componet), moveToBack(Component), setPosition(), setLayer()。。。。

import java.awt.Button;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JLayeredPane;

//實現鼠標移動組件的小程序
public class ParentAndChild {

	static Point oldPt;
	static JLayeredPane pane = new JLayeredPane();
	static Button btn = new Button(), btn1 = new Button("嘻嘻嘻");
	public static void main(String[] args) {
		Frame fm = new Frame("哈哈哈");
		fm.setVisible(true);
		pane.setLayout(new FlowLayout());
		fm.add(pane, "Center");
		btn.setLabel("啦啦啦");
		btn.addMouseListener(new MouseAdapter() {
				public void mousePressed(MouseEvent e) {
					oldPt=e.getLocationOnScreen();
				}
				public void mouseReleased(MouseEvent e) {
					 pane.setPosition(btn, -1);
				} 
		});
		
		btn.addMouseMotionListener(new MouseMotionAdapter() {
				public void mouseDragged(MouseEvent e) {
					 Point pt = e.getLocationOnScreen();
					 btn.setLocation(new Point(btn.getX() + pt.x-oldPt.x,
							         btn.getY() + pt.y-oldPt.y));
					 oldPt=pt;
				}
				
		});
			
		
		btn.setPreferredSize(new Dimension(200, 100));
		pane.add(btn);
		pane.add(btn1);
		fm.setSize(new Dimension(600, 800));
		
		
		fm.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e) {
					System.exit(0);
				}
		});
	}

}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM