?? addingmouselistener.java
字號:
/*
* AddingMouseListener.java
*
* Created on August 1, 2007, 4:36 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package dyno.swing.designer.beans.events;
import dyno.swing.designer.beans.*;
import dyno.swing.designer.beans.models.AddingModel;
import java.awt.Component;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.event.MouseEvent;
import java.beans.BeanInfo;
import javax.swing.RootPaneContainer;
import javax.swing.event.MouseInputListener;
/**
* 添加模式下鼠標事件處理器。
*
* @author William Chen
*/
public class AddingMouseListener extends DropTarget implements MouseInputListener, Constants {
private SwingDesigner designer;
/**
* 添加模式下當前要添加組件的BeanInfo
*/
private BeanInfo beanInfo;
/**
* 當前鼠標的設計組件
*/
private Component current;
/**
* 當前添加模式對應的model
*/
private AddingModel addingModel;
/** Creates a new instance of AddingMouseListener */
public AddingMouseListener(SwingDesigner designer, BeanInfo beanInfo) {
this.designer = designer;
this.beanInfo = beanInfo;
this.addingModel = designer.getAddingModel();
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
adding(e.getX(), e.getY());
}
private void adding(int x, int y) {
//當前鼠標所在的組件
Component hoveredComponent = designer.getComponentAt(x, y);
//獲取該組件所在的焦點容器
Component container = Util.getHotspotContainer(designer, hoveredComponent);
boolean success = false;
if (container != null) {
//獲取該container組件對應的適配器
ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, container);
if (adapter instanceof ContainerAdapter) {
//如果是容器,則調用其acceptComponent接受組件
success = ((ContainerAdapter) adapter).acceptComponent(x, y);
}
}
if (success) {
//如果添加成功,則觸發相應事件
fireComponentAdded();
designer.getSelectionModel().setSelectedComponent(addingModel.getBean());
} else {
Toolkit.getDefaultToolkit().beep();
fireComponentCanceled();
}
//取消提示
designer.setPainter(null);
//切換添加狀態到普通狀態
designer.stopAddingState();
}
//觸發各種事件
private void fireComponentAdded() {
DesignerEvent evt = new DesignerEvent(this);
evt.setAddedComponent(addingModel.getBean());
designer.getEditListenerTable().fireComponentAdded(evt);
}
private void fireComponentCanceled() {
DesignerEvent evt = new DesignerEvent(this);
designer.getEditListenerTable().fireComponentCanceled(evt);
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
entering(e.getX(), e.getY());
}
private void entering(int x, int y) {
//將要添加的組件圖標移動到鼠標下的位置
addingModel.moveTo(x, y);
designer.repaint();
}
public void mouseExited(MouseEvent e) {
exiting();
}
private void exiting() {
//隱藏組件圖標
addingModel.reset();
designer.repaint();
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
hovering(e.getX(), e.getY());
}
private void hovering(int x, int y) {
//當前位置移植鼠標e所在的位置
addingModel.moveTo(x, y);
//獲取e所在的焦點組件
Component hotspot = designer.getComponentAt(x, y);
//獲取焦點組件所在的焦點容器
Component container = Util.getHotspotContainer(designer, hotspot);
if(container instanceof RootPaneContainer)
container=((RootPaneContainer)container).getContentPane();
if (container != null) {
HoverPainter painter = null;
if (container != current) {
//如果焦點容器不是當前容器
if (current != null) {
//取消前一個焦點容器的提示渲染器
designer.setPainter(null);
}
painter = Util.getContainerPainter(designer, container);
//為界面設計器設置提示渲染提示器
designer.setPainter(painter);
//將當前容器更新為新的容器
current = container;
} else {
//獲取當前設計界面的提示渲染器
Painter p =designer.getPainter();
if(p instanceof HoverPainter)
painter = (HoverPainter)p;
}
if (painter != null) {
//為提示渲染器設置焦點位置、區域等渲染參數
Rectangle rect = Util.getRelativeBounds(container);
rect.x += designer.getOuterLeft();
rect.y += designer.getOuterTop();
painter.setRenderingBounds(rect);
painter.setHotspot(new Point(x, y));
painter.setComponent(addingModel.getBean());
}
} else {
//如果鼠標不在任何組件上,則取消提示器
designer.setPainter(null);
current = null;
}
designer.repaint();
}
public void dragEnter(DropTargetDragEvent dtde) {
Point loc = dtde.getLocation();
entering(loc.x, loc.y);
}
public void dragOver(DropTargetDragEvent dtde) {
Point loc = dtde.getLocation();
hovering(loc.x, loc.y);
}
public void dropActionChanged(DropTargetDragEvent dtde) {
}
public void dragExit(DropTargetEvent dte) {
exiting();
}
public void drop(DropTargetDropEvent dtde) {
Point loc = dtde.getLocation();
adding(loc.x, loc.y);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -