Browse Source

控件的框选问题

master
XiaXiang 7 years ago
parent
commit
c96943543e
  1. 46
      designer_form/src/com/fr/design/mainframe/ComponentTree.java
  2. 3
      designer_form/src/com/fr/design/mainframe/FormDesigner.java
  3. 28
      designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java

46
designer_form/src/com/fr/design/mainframe/ComponentTree.java

@ -1,30 +1,26 @@
package com.fr.design.mainframe; package com.fr.design.mainframe;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.DropMode;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.creator.XWAbsoluteBodyLayout;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.creator.XWFitLayout;
import com.fr.design.designer.creator.*;
import com.fr.design.designer.treeview.ComponentTreeCellRenderer; import com.fr.design.designer.treeview.ComponentTreeCellRenderer;
import com.fr.design.designer.treeview.ComponentTreeModel; import com.fr.design.designer.treeview.ComponentTreeModel;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.*;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.*;
import java.util.ArrayList;
public class ComponentTree extends JTree { public class ComponentTree extends JTree {
private FormDesigner designer; private FormDesigner designer;
private ComponentTreeModel model; private ComponentTreeModel model;
//xiaoxia 保存框选的全部组件,只显示第一个
private TreePath[] allSelectedTreePaths;
public ComponentTree(FormDesigner designer) { public ComponentTree(FormDesigner designer) {
this.designer = designer; this.designer = designer;
@ -92,9 +88,10 @@ public class ComponentTree extends JTree {
} }
} }
public void setAndScrollSelectionPath(TreePath treepath) { public void setAndScrollSelectionPath(TreePath[] treepath) {
setSelectionPath(treepath); this.setAllSelectedTreePaths(treepath);
scrollPathToVisible(treepath); setSelectionPath(treepath[0]);
scrollPathToVisible(treepath[0]);
} }
@ -112,7 +109,6 @@ public class ComponentTree extends JTree {
public TreePath[] getSelectedTreePath() { public TreePath[] getSelectedTreePath() {
XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators(); XCreator[] creators = designer.getSelectionModel().getSelection().getSelectedCreators();
TreePath[] paths = new TreePath[creators.length]; TreePath[] paths = new TreePath[creators.length];
for (int i = 0; i < paths.length; i++) { for (int i = 0; i < paths.length; i++) {
paths[i] = buildTreePath(creators[i]); paths[i] = buildTreePath(creators[i]);
} }
@ -141,7 +137,7 @@ public class ComponentTree extends JTree {
paths[i] = buildTreePath(searchList.get(i)); paths[i] = buildTreePath(searchList.get(i));
} }
if(paths.length > 0) { if(paths.length > 0) {
setAndScrollSelectionPath(paths[0]); setAndScrollSelectionPath(paths);
} else { } else {
setSelectionPath(); setSelectionPath();
} }
@ -217,4 +213,12 @@ public class ComponentTree extends JTree {
Object[] components = path.toArray(); Object[] components = path.toArray();
return new TreePath(components); return new TreePath(components);
} }
public TreePath[] getAllSelectedTreePaths() {
return allSelectedTreePaths;
}
public void setAllSelectedTreePaths(TreePath[] allSelectedTreePaths) {
this.allSelectedTreePaths = allSelectedTreePaths;
}
} }

3
designer_form/src/com/fr/design/mainframe/FormDesigner.java

@ -1008,7 +1008,7 @@ public class FormDesigner extends TargetComponent<Form> implements TreeSelection
@Override @Override
public void valueChanged(TreeSelectionEvent e) { public void valueChanged(TreeSelectionEvent e) {
ComponentTree tree = (ComponentTree) e.getSource(); ComponentTree tree = (ComponentTree) e.getSource();
TreePath[] paths = tree.getSelectionPaths(); TreePath[] paths = tree.getAllSelectedTreePaths();
if (paths != null) { if (paths != null) {
ArrayList<XCreator> selected = new ArrayList<XCreator>(); ArrayList<XCreator> selected = new ArrayList<XCreator>();
@ -1018,7 +1018,6 @@ public class FormDesigner extends TargetComponent<Form> implements TreeSelection
} }
if (!BaseUtils.isAuthorityEditing()) { if (!BaseUtils.isAuthorityEditing()) {
selectionModel.setSelectedCreators(selected); selectionModel.setSelectedCreators(selected);
TreePath path = e.getNewLeadSelectionPath(); TreePath path = e.getNewLeadSelectionPath();

28
designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java

@ -3,22 +3,24 @@ package com.fr.design.mainframe.widget;
/** /**
* Created by xiaxiang on 2016/9/30. * Created by xiaxiang on 2016/9/30.
*/ */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import javax.swing.plaf.metal.*;
import javax.swing.tree.*;
import com.fr.design.designer.beans.*; import com.fr.design.designer.beans.AdapterBus;
import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.mainframe.ComponentTree; import com.fr.design.mainframe.ComponentTree;
import com.sun.java.swing.plaf.motif.*; import com.sun.java.swing.plaf.motif.MotifComboBoxUI;
import com.sun.java.swing.plaf.windows.*; import com.sun.java.swing.plaf.windows.WindowsComboBoxUI;
import javax.swing.*;
import javax.swing.plaf.ComboBoxUI;
import javax.swing.plaf.basic.ComboPopup;
import javax.swing.plaf.metal.MetalComboBoxUI;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.*;
/** /**
* 控件树下拉列表框 * 控件树下拉列表框
@ -110,7 +112,7 @@ public class UITreeComboBox extends JComboBox{
int index, boolean isSelected, boolean cellHasFocus){ int index, boolean isSelected, boolean cellHasFocus){
if(tree != null && tree.getSelectedTreePath().length > 0){ if(tree != null && tree.getSelectedTreePath().length > 0){
TreePath path = tree.getSelectedTreePath()[0]; TreePath path = tree.getSelectedTreePath()[0];
tree.setAndScrollSelectionPath(path); tree.setAndScrollSelectionPath(tree.getSelectedTreePath());
Object node = path.getLastPathComponent(); Object node = path.getLastPathComponent();
value = node; value = node;
TreeCellRenderer r = tree.getCellRenderer(); TreeCellRenderer r = tree.getCellRenderer();
@ -132,7 +134,7 @@ public class UITreeComboBox extends JComboBox{
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
TreePath[] paths = tree.getSelectedTreePath(); TreePath[] paths = tree.getSelectedTreePath();
if (tree != null && paths.length > 0) { if (tree != null && paths.length > 0) {
tree.setAndScrollSelectionPath(paths[0]); tree.setAndScrollSelectionPath(paths);
setSelectedItem(paths[0]); setSelectedItem(paths[0]);
MenuSelectionManager.defaultManager().clearSelectedPath(); MenuSelectionManager.defaultManager().clearSelectedPath();
} }
@ -141,7 +143,7 @@ public class UITreeComboBox extends JComboBox{
tree.refreshUI(); tree.refreshUI();
TreePath[] paths = tree.getSelectedTreePath(); TreePath[] paths = tree.getSelectedTreePath();
if (tree != null && paths.length > 0) { if (tree != null && paths.length > 0) {
tree.setAndScrollSelectionPath(paths[0]); tree.setAndScrollSelectionPath(paths);
setSelectedItem(paths[0]); setSelectedItem(paths[0]);
MenuSelectionManager.defaultManager().clearSelectedPath(); MenuSelectionManager.defaultManager().clearSelectedPath();
} }

Loading…
Cancel
Save