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); } }); } }