亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? editingmouselistener.java

?? SWING的界面UI包 SWING的界面UI包
?? JAVA
字號:
/*
 * MouseSelectListener.java
 *
 * Created on July 31, 2007, 5:55 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.beans.layouts.AbsoluteLayout;
import dyno.swing.designer.beans.AdapterBus;
import dyno.swing.designer.beans.ComponentAdapter;
import dyno.swing.designer.beans.Constants;
import dyno.swing.designer.beans.ContainerAdapter;
import dyno.swing.designer.beans.DesignerEditor;
import dyno.swing.designer.beans.DesignerTransferHandler;
import dyno.swing.designer.beans.SpecialContainerAdapter;
import dyno.swing.designer.beans.SwingDesigner;
import dyno.swing.designer.beans.Util;
import dyno.swing.designer.beans.location.Location;
import dyno.swing.designer.beans.models.SelectionModel;
import dyno.swing.designer.beans.models.StateModel;
import dyno.swing.designer.properties.ValidationException;
import java.awt.Component;
import java.awt.Container;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.RootPaneContainer;
import javax.swing.SwingUtilities;
import javax.swing.TransferHandler;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MouseInputListener;


/**
 * 普通模式下的鼠標點擊、位置處理器
 * @author William Chen
 */
public class EditingMouseListener implements MouseInputListener, ChangeListener, Constants {

    private SwingDesigner designer;
    /**
     * 普通模式下對應的model
     */
    private StateModel stateModel;
    /**
     * 選擇模型,存儲當前選擇的組件和剪切板
     */
    private SelectionModel selectionModel;
    private Component lastComponent;
    private MouseEvent lastPressEvent;
    private DesignerEditor current_editor;
    private Component current_bean;
    private ComponentAdapter current_adapter;

    /** Creates a new instance of MouseSelectListener */
    public EditingMouseListener(SwingDesigner designer) {
        this.designer = designer;
        stateModel = designer.getStateModel();
        selectionModel = designer.getSelectionModel();
    }

    @Override
    public void mousePressed(MouseEvent e) {
        if (!stopEditing()) {
            return;
        }
        if (!designer.isFocusOwner()) {
            //獲取焦點,以便獲取熱鍵
            designer.requestFocus();
        }

        if (e.isPopupTrigger()) {
            //為觸發上下文菜單預留
            trigger_popup(e);
        } else if (e.getButton() == MouseEvent.BUTTON1) {
            //獲取鼠標所在被選中的組件
            Component comp = selectionModel.getSelectionAt(e);
            Component hotspot = designer.getComponentAt(e);
            if (selectionModel.isSelectedResizable() && 
                    (comp != null) && 
                    (hotspot == comp || 
                    isParent(comp, hotspot))) {
                //如果在鼠標有被選擇的組件,并且組件是處理可被拖拽狀態,則更新當前鼠標的位置信息以及鼠標形狀
                stateModel.updateLocRel2Comp(e, comp);
                designer.updateCursor();

                if (stateModel.getLocation() != Location.outer) {
                    //如果當前是處于拖拽位置,則開始拖拽,記錄初始拖拽狀態
                    stateModel.startSelectionResizing(e);
                }
            } else {
                //如果是其他情況,計算是否在拖拽根組件的位置
                stateModel.updateLocRel2Root(e);

                if (stateModel.getLocation() == Location.outer) {
                    //如果不是處于拖拽位置,則先將該組件添加到被選擇的組件中
                    selectionModel.selectAComponentAtMouseEvent(e);
                    designer.repaint();
                    //并獲取當前鼠標所在的組件
                    comp = designer.getComponentAt(e);

                    if (comp != null) {
                        //獲取組件的適配器
                        ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, comp);

                        //調用其適配器處理鼠標點擊,在此處可以處理JTabbedPane頁面切換的特殊情況
                        if (adapter.componentClicked(e)) {
                            //如果componentClicked處理結果需要繼續后續鼠標處理
                            if (adapter instanceof ContainerAdapter && ((((ContainerAdapter) adapter).getChildCount() > 0) || (comp.getParent() == null)) && !(adapter instanceof SpecialContainerAdapter)) {
                                //當前組件如果是容器,則開始進入區域拖拽選擇模式
                                stateModel.startSelecting(e);
                                //設置當前選擇的熱點區域
                                selectionModel.setHotspotBounds(new Rectangle());
                            } else if (isComponentResizable(comp)) {
                                //如果鼠標所在的組件是可以拖拽的,則繼續該鼠標的進一步處理
                                mousePressed(e);
                            } else if (comp.getParent() != null) {
                                lastPressEvent = e;
                                lastComponent = comp;
                            }
                        } else {
                            designer.setInvalidated(true);
                        }
                    }
                } else {
                    //如果是拖拽根組件狀態,則更新鼠標形狀
                    designer.updateCursor();
                    //開始resize根組件
                    stateModel.startResizing(e);
                }
            }
        }
    }

    //comp是否是可以拖拽
    private boolean isComponentResizable(Component comp) {
        Container parent = comp.getParent();

        if (parent != null) {
            //如果其父容器組件的布局管理器為空或者是AbsoluteLayout則可以拖拽
            LayoutManager layout = parent.getLayout();

            if ((layout == null) || layout instanceof AbsoluteLayout) {
                return true;
            }
        }

        return false;
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        if (e.isPopupTrigger()) {
            trigger_popup(e);
        } else {
            if (stateModel.isSelecting()) {
                //如果當前是區域選擇狀態,則選擇該區域所含的組件
                designer.selectComponents(e);
            } else if (stateModel.isDragging()) {
                //如果是處于拖拽狀態,則釋放組件
                designer.releaseComponentsDragging(e);
            } else {
            }
        }

        lastPressEvent = null;
        lastComponent = null;
    }

    private boolean isParent(Component child, Component parent) {
        if (parent == child.getParent()) {
            return true;
        }
        if(parent instanceof RootPaneContainer){
            RootPaneContainer rootPane=(RootPaneContainer)parent;
            return rootPane.getContentPane() == child.getParent();
        }
        return false;
    }

    /**
     * 激活上下文菜單,待完善
     */
    private void trigger_popup(MouseEvent e) {
        ArrayList<Component> selection = selectionModel.getSelectedComponents();

        if ((selection == null) || selection.isEmpty()) {
            return;
        }

        JPopupMenu popupMenu = null;

        if (selection.size() > 0) {
            Component component = selection.get(0);
            ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, component);
            popupMenu = adapter.getContextPopupMenu(e);
        } else {
            return;
        }

        if (popupMenu != null) {
            popupMenu.show(designer, e.getX(), e.getY());
        }
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        //鼠標移動,獲取鼠標所在被選擇的組件
        Component comp = selectionModel.getSelectionAt(e);

        if (selectionModel.isSelectedResizable() && (comp != null)) {
            //如果當前所在的被選擇組件是可以拖拽的,更新其位置信息
            stateModel.updateLocRel2Comp(e, comp);
        } else {
            //更新其相對于根組件的位置信息
            stateModel.updateLocRel2Root(e);
        }
        //更新鼠標形狀
        designer.updateCursor();
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        if (stateModel.isDragging()) {
            //如果當前是拖拽狀態,拖拽組件
            stateModel.dragging(e);
        } else if (stateModel.isSelecting() && (selectionModel.getHotspotBounds() != null)) {
            //如果是拖拽選擇區域狀態,則更新選擇區域
            stateModel.changeSelection(e);
        } else {
            if ((lastPressEvent == null) || (lastComponent == null)) {
                return;
            }

            if (e.getPoint().distance(lastPressEvent.getPoint()) > 5) {
                TransferHandler handler = new DesignerTransferHandler();
                designer.setTransferHandler(handler);
                handler.exportAsDrag(designer, lastPressEvent, TransferHandler.COPY);
                designer.startDraggingComponent(lastComponent, e.getX(), e.getY());
                e.consume();
                lastPressEvent = null;
            }
        }

        designer.repaint();
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() <= 1) {
            return;
        }
        if (stopEditing()) {
            Component bean = designer.getComponentAt(e);
            if (bean != null) {
                int x = e.getX();
                int y = e.getY();
                ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, bean);
                x -= designer.getOuterLeft();
                y -= designer.getOuterTop();

                Rectangle rect = Util.getRelativeBounds(bean);
                x -= rect.x;
                y -= rect.y;

                DesignerEditor editor = adapter.getDesignerEditor(x, y);

                if (editor != null) {
                    current_editor = editor;
                    current_bean = bean;
                    current_adapter = adapter;
                    current_editor.addChangeListener(this);
                    Rectangle bounds = current_adapter.getEditorBounds(x, y);
                    bounds.x += (rect.x + designer.getOuterLeft());
                    bounds.y += (rect.y + designer.getOuterTop());
                    Component editorComponent = current_editor.getEditorComponent();
                    editorComponent.setBounds(bounds);
                    if (editorComponent instanceof Container) {
                        Util.layoutContainer((Container) editorComponent);
                    }
                    designer.add(editorComponent);
                    designer.invalidate();
                    Object v = current_adapter.getBeanValue();
                    current_editor.setValue(v);
                    editorComponent.requestFocus();
                    designer.repaint();
                }
            }
        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    private boolean stopEditing() {
        if (current_editor != null) {
            try {
                Object value = current_editor.getValue();
                current_adapter.validateBeanValue(value);
                Object old_value = current_adapter.getBeanValue();
                if (Util.isChanged(old_value, value)) {
                    current_adapter.setBeanValue(value);
                    DesignerEvent evt = new DesignerEvent(designer);
                    evt.setAffectedComponent(current_bean);
                    designer.getEditListenerTable().fireComponentEdited(evt);
                }
                designer.remove(current_editor.getEditorComponent());

                Container container = current_bean.getParent();

                if (container != null) {
                    Util.layoutContainer(container);
                }

                designer.invalidate();
                designer.repaint();
                current_editor.removeChangeListener(this);

                current_adapter = null;
                current_bean = null;
                current_editor = null;
                return true;
            } catch (ValidationException e) {
                JOptionPane.showMessageDialog(designer, e.getMessage(), "Error Message", JOptionPane.ERROR_MESSAGE);

                return false;
            }
        }

        return true;
    }

    public void stateChanged(ChangeEvent e) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                stopEditing();
            }
        });
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区在线播放| 91在线视频18| 精品国产免费人成在线观看| 美日韩黄色大片| 久久在线观看免费| 不卡一区二区在线| 亚洲精品日韩综合观看成人91| 色综合中文字幕国产| 亚洲国产综合视频在线观看| 2017欧美狠狠色| 亚洲女厕所小便bbb| 色哟哟欧美精品| 亚洲国产精品久久不卡毛片| 欧美一区二区三区在线看| 麻豆国产91在线播放| 国产精品视频你懂的| 一本一道综合狠狠老| 日韩高清中文字幕一区| 国产色一区二区| 色婷婷久久久久swag精品| 日韩精品久久久久久| 久久麻豆一区二区| 在线这里只有精品| 精品亚洲国产成人av制服丝袜| 国产精品麻豆网站| 69久久夜色精品国产69蝌蚪网| 狠狠色丁香久久婷婷综合_中| 综合久久给合久久狠狠狠97色| 欧美精品丝袜久久久中文字幕| 国产精品一区免费视频| 亚洲成人av一区二区三区| 国产一区二区久久| 成人黄色大片在线观看| 亚洲精品免费在线| 日韩亚洲欧美成人一区| 成人影视亚洲图片在线| 午夜精品国产更新| 国产精品黄色在线观看| 91精品国产福利| 91蜜桃网址入口| 激情综合网激情| 一区二区三区蜜桃网| 国产欧美一区二区精品秋霞影院| 欧美日韩成人在线| 91蜜桃视频在线| 成人综合婷婷国产精品久久蜜臀 | 亚洲自拍偷拍综合| 国产色综合久久| 日韩免费一区二区| 欧美日韩精品福利| 94色蜜桃网一区二区三区| 亚洲国产aⅴ成人精品无吗| 国产在线精品不卡| 亚洲一区二区中文在线| 欧美激情中文字幕一区二区| 欧美日韩免费高清一区色橹橹| 成人高清视频免费观看| 精品一区二区三区在线观看国产| 亚洲午夜私人影院| 国产精品久久久久久亚洲伦| 久久美女艺术照精彩视频福利播放| 欧美福利视频一区| 欧美主播一区二区三区美女| 成人理论电影网| 丁香啪啪综合成人亚洲小说| 国产真实乱偷精品视频免| 日本美女一区二区| 亚洲妇女屁股眼交7| 亚洲一区二区精品久久av| 亚洲免费观看高清| 亚洲人成在线观看一区二区| 国产精品美女久久久久高潮| 中文字幕免费观看一区| 欧美激情艳妇裸体舞| 欧美激情一区二区三区不卡| 国产欧美精品区一区二区三区| 国产成人一区二区精品非洲| 五月天一区二区三区| 亚洲一区二区在线观看视频| 亚洲午夜在线视频| 五月激情综合网| 美腿丝袜亚洲色图| 久久99精品久久久久久动态图| 久久精品免费看| 寂寞少妇一区二区三区| 国产成人av网站| 99精品欧美一区二区三区小说| 99久久综合国产精品| 色综合天天综合给合国产| 91一区二区在线观看| 91成人网在线| 91精品国产入口| www国产成人免费观看视频 深夜成人网| 日韩欧美亚洲国产另类| 久久久久久久综合日本| 综合av第一页| 天天色 色综合| 国产一区在线精品| 不卡的av电影| 9191精品国产综合久久久久久 | 欧美va日韩va| 精品免费视频一区二区| 久久免费电影网| 国产精品理论片在线观看| 亚洲人快播电影网| 日韩福利视频导航| 捆绑调教一区二区三区| 成人一区二区三区视频在线观看 | 国产精品一区二区不卡| 91老司机福利 在线| 6080日韩午夜伦伦午夜伦| 久久久91精品国产一区二区三区| 国产精品福利影院| 欧美bbbbb| 99视频精品在线| 日韩丝袜美女视频| 国产精品福利av| 蜜臀久久99精品久久久久久9| 丁香婷婷综合网| 91精选在线观看| 国产喂奶挤奶一区二区三区| 亚洲成av人片观看| 成人免费毛片片v| 91麻豆精品国产91久久久使用方法| 蜜桃视频免费观看一区| 东方aⅴ免费观看久久av| 欧美日韩黄色一区二区| 国产精品色婷婷| 日本午夜一区二区| 色天使色偷偷av一区二区| 久久九九国产精品| 免费观看在线综合色| 欧美在线三级电影| 国产精品免费视频观看| 久久av老司机精品网站导航| 欧美性大战久久| 中文字幕一区免费在线观看 | 一区二区三区精品久久久| 国产一区啦啦啦在线观看| 3d成人动漫网站| 一区二区三区四区五区视频在线观看 | 欧美日韩午夜精品| 国产精品久久久久桃色tv| 国产麻豆视频一区二区| 51精品视频一区二区三区| 亚洲综合丁香婷婷六月香| 99久久精品免费观看| 久久精品综合网| 国产99久久久国产精品潘金网站| 欧美日韩国产精品成人| 久久久国产综合精品女国产盗摄| 亚洲黄色性网站| 成人综合婷婷国产精品久久蜜臀 | 久久在线免费观看| 蜜臀91精品一区二区三区| 欧美午夜一区二区三区免费大片| 国产精品福利一区二区三区| 亚洲精品高清视频在线观看| 国产不卡视频在线观看| 久久久亚洲欧洲日产国码αv| 久久se精品一区精品二区| 欧美一区二区三区系列电影| 天涯成人国产亚洲精品一区av| 色综合亚洲欧洲| 亚洲欧美日韩一区二区三区在线观看| 国产999精品久久久久久绿帽| 久久一留热品黄| 国产成人免费视频精品含羞草妖精| 精品国产乱码久久久久久蜜臀| 久久91精品久久久久久秒播| 精品对白一区国产伦| 国产成人免费视频一区| 国产日韩欧美精品电影三级在线| 国产成人综合在线观看| 国产精品日韩精品欧美在线| www.av精品| 亚洲黄色免费网站| 欧美日韩国产经典色站一区二区三区| 亚洲大片在线观看| 欧美一区二区三区在线看| 国产在线精品一区二区| 国产日产精品一区| 色婷婷综合久久| 日韩精品久久久久久| 精品国产一区久久| av在线一区二区| 亚洲一区电影777| 日韩精品综合一本久道在线视频| 国产原创一区二区| 亚洲人成小说网站色在线| 依依成人综合视频| 一区二区久久久| 欧美中文一区二区三区| 日韩电影一二三区| 国产亚洲精品超碰| 色婷婷精品久久二区二区蜜臂av | 性做久久久久久久久| 精品日韩欧美一区二区| 成人午夜在线免费| 亚洲黄色小视频|