现在的位置: 首页 > 综合 > 正文

试图模仿 Jbuilder拖拽生成代码功能

2018年05月19日 ⁄ 综合 ⁄ 共 28235字 ⁄ 字号 评论关闭

说实话,写的挺烂的,本来想做好点,半途而废了,懒,

里面最复杂的功能是菜单栏目,点击menu标签,在点 menu更改, 弹出一个框,如图:

里面输入这种格式。

文件(新建,另存&)
编辑
查看

懂了吧,另存& 表示这个子item被默认添加了click监听器,

好了,自己试试吧。

运行,只要在mian中 new GUIBuilder();  只有一个类,无需部署.
就ok 了。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.*;

import java.util.ArrayList;

import java.util.HashMap;

@SuppressWarnings("serial")
public class GUIBuilder extends JFrame implements ChangeListener
{
	final int NUM=16;
	private final int ROW=59;//y坐标
	private final int COL=70;//x坐标
	//////////////////////////////////////////////////////////////////////////////////////
	final Sort SORT=new Sort();
	final CmpSort SORTSTRING=new CmpSort();
	final Listeners LISTENER=new Listeners();
	final Relations RELATION=new Relations();
	final ListenerMethod METHOD =new ListenerMethod();
	//////////////////////////////////////////////////////////////////////////////////////
	private MyPanel componentPane=null;
    private JPanel centerPane=null;
    private JPanel attributePane=null;
    private JTabbedPane tab=new JTabbedPane();
    MainPane drawPane=new MainPane(this);
    JPanel codePane=new JPanel();
    JTextArea tea=new JTextArea();///////////////////////////代码写这里
    Range range=new Range();
    MyPoint [][] point=new MyPoint[COL][ROW];
    ////////////////////////////////////////////////////////////////////
    
    ArrayList<MyComponent> cmp=new ArrayList<MyComponent>(); //////////////////组件   
    HashMap<MyComponent,ItemClass> item=new HashMap<MyComponent,ItemClass>();//组件-------item
    ///////////////////
    HashMap<String,ItemClass>itemsitem=new HashMap<String,ItemClass>();///子菜单
    HashMap<MyComponent,ArrayList<Integer>> listener=
    	new  HashMap<MyComponent,ArrayList<Integer>>();///////////////组件-----监听器
    Image img=null;
    boolean dragRange=false;
    Point2D rangeLastLocation=new Point2D.Double(300,300);
    Rectangle2D put=new Rectangle2D.Double();///放置矩形
    boolean setSizeFlag=false;
    MyComponent draging=null;
    MyComponent dragingSize=null;
    ////////////////////
    Line2D [] rows=new Line2D.Double[59];
    Line2D [] cols=new Line2D.Double[70];
    ///////////////////////////////
    Rectangle2D [] components=new Rectangle2D.Double[16];
    Point2D nearest=new Point2D.Double(40,40);///最近点
    int willPut=-1;///将要放置的
    boolean dragingCMP=false;
    int maxID=1;////最大ID
    MyComponent focusCMP=null;/////////////////////当前焦点组件
    Color B=new Color(100,200,100);//一种颜色
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    JLabel label_1=null;
    JLabel label_2=null;
    JLabel label_3=null;
    JButton label_4=null;
    JLabel label_5=null;
    JLabel lbl6=null;
    
    JTextField text_1=null;
    JTextField text_2=null;
    JComboBox cbo_1=null;
    JButton cbo_2=null;
    JButton btn2=null;
    JButton btn_tab=null;
    JButton btn_list=null;
    ////////////////////////////////////////////////////////////////////////////////////////////////
    boolean addListener(MyComponent e,String str)
    {
    	
    	int num=-1;
    	boolean flag=false;
    	for(int i=0;i<this.LISTENER.NAME.length;i++)
    	{
    		if(str.equals(LISTENER.NAME[i]))
    		{
    			num=i;
    			flag=true;
    			break;
    		}
    	}
    	if(flag==false)
    	{
    		return false;
    	}
    	
    	if(this.listener.get(e)==null)
    	{
    		this.listener.put(e, new ArrayList<Integer>());
    		this.listener.get(e).add(num);
    		return true;
    	}
    	else
    	{
    		ArrayList<Integer> tem=this.listener.get(e);
    		for(int i=0;i<tem.size();i++)
    		{
    			if(num==tem.get(i).intValue())
    			{
    				return true;
    			}
    		}
    		this.listener.get(e).add(num);
    		return true;
    	}
    }
   class ItemClass
    {
    	String codeString=null;
    	ArrayList<String> item=null;
    	ItemClass(String a,ArrayList<String> b)
    	{
    		codeString=a;
    		item=b;
    	}
    }
    class ItemFrame extends JFrame implements ActionListener
	{
		private static final long serialVersionUID = 122L;
		JScrollPane js=new JScrollPane();
		  private JTextArea area=null;
		  private JButton button_1=null;
		  public ItemFrame(){};
		  public ItemFrame(ArrayList<String> args)
		  {
		    super("ADDTION");
		    this.setDefaultCloseOperation(0);
		    setBounds(200,200,400,330);
		    JPanel jp=new JPanel();
		    jp.setLayout(null);
		    init();
		    area.setText("");
		    if(args!=null)
		    {
			    String tem="";
			    int len=args.size();
			    for(int i=0;i<len;i++)
			    {
			    	tem+=args.get(i)+"\n";
			    }
			    area.setText(tem);
		    }
		    
		    js.getViewport().add(area);
		    jp.add(js);
		    button_1.addActionListener(this);
		    jp.add(button_1);
		    setContentPane(jp);
		    setVisible(true);
		  }
		  private void init()
		  {
			area=new JTextArea();
		    js.setBounds(52,10,274,248);
		    button_1=new JButton("确定");
		    button_1.setBounds(144,261,94,28);
		  }
		public void actionPerformed(ActionEvent e) 
		{
			String tem=area.getText().toString();
			int count=0;
			int n=0;
			ArrayList<String> arr=new ArrayList<String>();
			for(int i=0,len=tem.length();i<len;i++)
			{
				if(tem.charAt(i)=='\n')
				{
					arr.add(tem.substring(n,i));
					n=i+1;
					count++;
				}
			}
			String codes="";
			
			String cboName=focusCMP.name;
			for(int i=0;i<count;i++)
			{
				codes+="\t\t"+cboName+".addItem(\""+arr.get(i)+"\");\n";
			}
			if(item.get(focusCMP)==null)
			{
				item.put(focusCMP,new ItemClass(codes,arr) );
				if(focusCMP.sort==SORT.JMENUBAR)
				{
					for(int k=0;k<arr.size();k++)
					{
						itemsitem.put(arr.get(k), compile(arr.get(k)));
					}
				}
			}
			else
			{
				item.get(focusCMP).codeString=codes;
				item.get(focusCMP).item=arr;
				if(focusCMP.sort==SORT.JMENUBAR)
				{
					for(int k=0;k<arr.size();k++)
					{
						itemsitem.put(arr.get(k), compile(arr.get(k)));
					}
				}
			}
			System.out.println(codes);
			this.dispose();
		}
	}
    
    private ItemClass compile(String str)
    {
    	if(str.charAt(str.length()-1)!=')')
    		return null;
    	else
    	{
    		String str1=null;
    		String str2=null;
    		ArrayList<String> list=new ArrayList<String>();
    		for(int i=0;i<str.length();i++)
    		{
    			if(str.charAt(i)=='(')
    			{
    				str1=str.substring(0,i);
    				str2=str.substring(i+1,str.length()-1);
    			}
    		}
    		int start=0;
    		int end=0;
    		for(int i=0;i<str2.length();i++)
    		{
    			if(str2.charAt(i)==',')
    			{
    				end=i;
    				list.add(str2.substring(start,end));
    				start=i+1;
    			}
    		}
    		if(str2.substring(start).length()>0)
    		{
    			list.add(str2.substring(start));
    		}
    		ItemClass itm=new ItemClass(str1,list);
    		return itm;
    	}
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////
    void drawLine(Graphics2D g)
    {
    	g.setColor(new Color(200,200,210));
    	for(int i=0;i<COL;i++)
    	{
    		g.draw(cols[i]);
    	}
    	for(int i=0;i<ROW;i++)
    	{
    		g.draw(rows[i]);
    	}
    }
    void removeCMP(MyComponent e)
    {
    	for(int i=0;i<cmp.size();i++)
    	{
    		if(cmp.get(i)==this.focusCMP)
    		{
    			focusCMP=null;
    			cmp.remove(i);
    			break;
    		}
    	}
    	this.item.remove(e);/////////////////////////////////////
    	this.listener.remove(e);///////////////////////////
    }
    void initComponents()
    {
    	for(int i=0;i<16;i++)
    	{
    		components[i]=new Rectangle2D.Double(25,30+30*i,60,25);
    	}
    }
    
    void drawComponents(Graphics2D g)
    {
    	g.setColor(Color.blue);
    	for(int i=0;i<16;i++)
    	{
    		if(i==willPut)
    		{
    			g.setColor(Color.red);
    			g.fill(components[i]);
    			g.setColor(Color.blue);
    		}
    		else
    		{
    			g.fill(components[i]);
    		}
    	}
    	g.setColor(Color.white);
    	
    	for(int i=0;i<16;i++)
    	{
    		g.drawString(SORTSTRING.STRINGS[i], 27, 47+30*i);
    	}
    }
    
    boolean  getNearestPoint()
    {
    	for(int x=0;x<COL;x++)
    	{
    		for(int y=0;y<ROW;y++)
        	{
    			
        		if(put.contains(point[x][y].point))
        		{
        			//System.out.println(y);
        			nearest=point[x][y].point;
        			return true;
        		}
        	}
    	}
    	return false;
    }
    void drawViewComponent(Graphics2D g)
    {
    	for(int i=0;i<cmp.size();i++)
    	{
    		if(cmp.get(i)==focusCMP)
    		{
    			g.setColor(Color.orange);
    			g.fill(cmp.get(i).border);
    			g.setColor(B);
    		}
    		else
    		{
    			g.fill(cmp.get(i).border);
    		}
    	}
    	g.setColor(Color.white);
    	for(int i=0;i<cmp.size();i++)
    	{
    		Rectangle2D tem=cmp.get(i).border;
    		g.drawString(cmp.get(i).text,(int)tem.getX(), (int)(tem.getY()+tem.getHeight()/2+5));
    	}
    }
    boolean setCmpName(MyComponent me,String name)
    {
    	if(me==null)
    	{
    		return false;
    	}
    	for(int i=0;i<cmp.size();i++)
    	{
    		if(me!=cmp.get(i))
    		{
    			if(name.equals(cmp.get(i).name))
    			{
    				return false;
    			}
    		}
    	}
    	me.name=name;
    	return true;
    }
    void setText(MyComponent me,String t)
    {
    	if(me!=null)
    		me.text=t;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    public GUIBuilder()///////////////////////////////////////////////////////////////////////////////////
    {
        this.setTitle("GUI图形用户界面生成器");
        
        for(int x=0;x<COL;x++)
        {
        	
        	for(int y=0;y<ROW;y++)
        	{
        		point[x][y]=new MyPoint(new Point2D.Double(x*10,y*10));
        	}
        }
        for(int i=0;i<COL;i++)
        {
        	cols[i]=new Line2D.Double(i*10,0,i*10,580);
        }
        
        for(int i=0;i<ROW;i++)
        {
        	rows[i]=new Line2D.Double(0,i*10,690,i*10);
        }
      
        initComponents();
        this.setDefaultCloseOperation(3);
        setBounds(10,50,1000,645);
        JPanel jp=new JPanel();
        jp.setLayout(null);
        init();
        jp.add(componentPane);
        jp.add(centerPane);
        //////////////////////////////////////////////
        attributePane.setLayout(null);
        label_1=new JLabel("");
        label_1.setBounds(4,5,173,37);
        label_1.setFont(new Font("黑体",Font.BOLD,16));
        label_2=new JLabel("Name");
        label_2.setBounds(4,48,55,20);
        label_3=new JLabel("Text");
        label_3.setBounds(4,76,55,20);
        label_4=new JButton("add");//////////////////////////////////////////////////////////////按钮
        label_4.addActionListener(new ActionListener()
        {

			public void actionPerformed(ActionEvent e) 
			{
				//System.out.println(cbo_1.getSelectedItem().toString()+"******");
				int count=cbo_1.getItemCount();
				if(count>0)
				{
					if(focusCMP!=null)
					{
						addListener(focusCMP,cbo_1.getSelectedItem().toString());
						if(listener.get(focusCMP)!=null)
							System.out.println(listener.get(focusCMP).toString());
						else
						{
							System.out.println("null");
						}
					}
					tab.setSelectedIndex(1);
				}
			}
        });
        label_4.setBounds(0,103,55,21);
        label_5=new JLabel("Items");
        label_5.setBounds(4,130,55,20);
        text_1=new JTextField();
        text_1.setBounds(55,46,115,24);
        text_2=new JTextField();
        text_2.setBounds(55,75,114,23);
        cbo_1=new JComboBox();
        cbo_1.setBounds(56,102,115,23);
        cbo_2=new JButton(" 添 加 ");
        cbo_2.setBounds(55,129,115,23);
        this.lbl6=new JLabel("Menu");
        lbl6.setBounds(4, 157, 55, 21);
        this.btn2=new JButton(" 更 改 ");
        btn2.setBounds(55,157,115,22);
        btn2.addActionListener(new ActionListener()
        {
			public void actionPerformed(ActionEvent e) 
			{
				if(focusCMP!=null)
				{
					if(focusCMP.sort==SORT.JMENUBAR)
					{
						ItemClass tem=null;
						if(item.get(focusCMP)==null)
						{
							new ItemFrame(null);
						}
						else
						{
							tem=item.get(focusCMP);
							new ItemFrame(tem.item);
						}
					}
				}
			}
        });
        FocusListener l=new FocusHandler();
        text_1.addFocusListener(l);
        text_2.addFocusListener(l);
        cbo_2.addActionListener(new ActionListener()
        {

			public void actionPerformed(ActionEvent e) 
			{
				if(focusCMP!=null)
				{
					if(focusCMP.sort==SORT.COMBOBOX)
					{
						ItemClass tem=null;
						if(item.get(focusCMP)==null)
						{
							new ItemFrame(null);
						}
						else
						{
							tem=item.get(focusCMP);
							new ItemFrame(tem.item);
						}
					}
				}
			}
        	
        });
        JLabel lbl_tab =new JLabel("选项卡");
        lbl_tab.setBounds(4, 185, 55, 21);
        btn_tab=new JButton("添加卡片");
        btn_tab.setBounds(55,185,115,22);
        btn_tab.addActionListener(new ActionListener()
        {
			public void actionPerformed(ActionEvent e) 
			{
				if(focusCMP!=null)
				{
					if(focusCMP.sort==SORT.TABBEDPANE)
					{
						ItemClass tem=null;
						if(item.get(focusCMP)==null)
						{
							new ItemFrame(null);
						}
						else
						{
							tem=item.get(focusCMP);
							new ItemFrame(tem.item);
						}
					}
				}
			}
		});
        JLabel lbl_list=new JLabel("列表");
        lbl_list.setBounds(4, 213, 55, 21);
        btn_list=new JButton("添加项");
        btn_list.setBounds(55,213,115,22);
        btn_list.addActionListener(new ActionListener()
        {
			public void actionPerformed(ActionEvent e) 
			{
				if(focusCMP!=null)
				{
					if(focusCMP.sort==SORT.LIST)
					{
						ItemClass tem=null;
						if(item.get(focusCMP)==null)
						{
							new ItemFrame(null);
						}
						else
						{
							tem=item.get(focusCMP);
							new ItemFrame(tem.item);
						}
					}
				}
			}
		});
        attributePane.add(lbl_list);
        attributePane.add(btn_list);
        attributePane.add(btn_tab);
        attributePane.add(lbl_tab);
        attributePane.add(label_1);
        attributePane.add(label_2);
        attributePane.add(label_3);
        attributePane.add(label_4);
        attributePane.add(label_5);
        attributePane.add(text_1);
        attributePane.add(text_2);
        attributePane.add(cbo_1);
        attributePane.add(cbo_2);
        attributePane.add(this.lbl6);
        attributePane.add(this.btn2);
        ////////////////////////////////////////////////
        jp.add(attributePane);
        setContentPane(jp);
     
        setVisible(true);
        this.setResizable(false);
        /////////////////////////////////////////////////////////////////////////////////////////////////
    }
    private void init()
    {
    	componentPane=new MyPanel(this);
    	componentPane.setBounds(0,0,113,615);
    	centerPane=new JPanel();
    	centerPane.setBounds(115,0,700,615);

    	centerPane.setLayout(new BorderLayout());
        tab.add("视图", drawPane);
        JScrollPane js=new JScrollPane();
        js.getViewport().add(tea);
        tea.setFont(new Font("宋体",Font.BOLD,16));
        tea.setTabSize(3);
        tea.setForeground(Color.blue);
        codePane.setLayout(new BorderLayout());
        codePane.add(js);
        tab.add("代码",codePane);
        tab.addChangeListener(this);
    	centerPane.add(tab);

    	//codePane.setBackground(Color.pink);
    	
        attributePane=new JPanel();
        attributePane.setBounds(817,0,171,615);
    }
    
    public void cross()
	{
		this.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
	}
	public void changesize()
	{
		this.setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
	}
	public void deletecross()
	{
		this.setCursor(Cursor.getDefaultCursor());
	}
	
	boolean findRange(Point2D e)
	{
		if(range.dragArea.contains(e))
		{
			return true;
		}
		return false;
	}
	MyComponent findComponent(Point2D e)
	{
		for(int i=0;i<cmp.size();i++)
		{
			if(cmp.get(i).dragSize.contains(e))
			{
				setSizeFlag=true;
				return cmp.get(i);
			}
			if(cmp.get(i).border.contains(e))
			{
				setSizeFlag=false;
				return cmp.get(i);
			}
		}
		return null;
	}
	boolean setBorderLocation()
	{
		for(int x=0;x<COL;x++)
		{
			for(int y=0;y<ROW;y++)
			{
				if(range.dragArea.contains(point[x][y].point))
				{
					
					range.setRange(point[x][y].point);
					rangeLastLocation=point[x][y].point;
					repaint();
				//	System.out.println(x +"   "+y);
					
					return true;
				}
			}
		}
		range.setRange(rangeLastLocation);
		repaint();
		return false;
	}
	
	MyComponent findComponentById(int id)
	{
		for(int i=0;i<cmp.size();i++)
		{
			if(cmp.get(i).id==id)
			{
				return cmp.get(i);
			}
		}
		return null;
	}
	
	String getName(MyComponent myComponent)
	{
		int count=1;
		for(int i=0;i<cmp.size();i++)
		{
			if(cmp.get(i).sort==myComponent.sort)
			{
				if(count<=cmp.get(i).sortID)
				{
					count=cmp.get(i).sortID+1;
				}
			}
		}
		myComponent.sortID=count;
		return SORT.NAME[myComponent.sort]+count;
	}
	
	class FocusHandler implements FocusListener
	{
		public void focusGained(FocusEvent e)
		{
			
		}

		public void focusLost(FocusEvent e) 
		{
			setCmpName(focusCMP,text_1.getText());
			setText(focusCMP,text_2.getText());
		}
	}
	
	String createCode()
	{
		String code1="import javax.swing.event.*;\nimport javax.swing.*;\n"+
		"import java.awt.*;\n"+"import java.awt.event.*;\n\n"+
		"class MyFrame extends JFrame\n"+
		"{\n";///////////////差后扩号
		String code2="";
		String code20="";///////////////////////////////////////  addListener
		String code21="";////////////////////////
		String code200="";///////////////////////////////        addItem
		String code3="";////////////////////////////////   jp.add()
		String code4="\tprivate void init()\n\t{\n";/////////////////////////////////  init()
		for(int i=0;i<cmp.size();i++)
		{
			code2+="\tprivate "+SORT.CMP[cmp.get(i).sort]+" "+cmp.get(i).name+" =null;\n";
			
			if(this.listener.get(cmp.get(i))!=null)
			{
				ArrayList<Integer> lis=this.listener.get(cmp.get(i));
				for(int j=0;j<lis.size();j++)
				{
					code20+="\t\t"+cmp.get(i).name+".add"+this.LISTENER.NAME[lis.get(j)]+"(new "+cmp.get(i).name+"_"+this.LISTENER.NAME[lis.get(j)]+"());\n";
					code21+="\tclass "+cmp.get(i).name+"_"+this.LISTENER.NAME[lis.get(j)]+METHOD.TEXT[lis.get(j)];
				}
			}
			
			if(this.item.get(cmp.get(i))!=null)
			{
				ItemClass te1=this.item.get(cmp.get(i));
				ArrayList<String> tem=te1.item;
				for(int j=0;j<tem.size();j++)
				{
					if(cmp.get(i).sort==SORT.COMBOBOX)
					{
						code200+="\t\t"+cmp.get(i).name+".addItem(\""+tem.get(j)+"\");\n";
					}
					else if(cmp.get(i).sort==SORT.JMENUBAR)
					{
						
						code200+="\t\tJMenu "+cmp.get(i).name+"_item"+(j+1)+" =new JMenu(\""+tem.get(j)+"\");\n" ;
						code200+="\t\t"+cmp.get(i).name+".add("+cmp.get(i).name+"_item"+(j+1)+");\n";
						if(itemsitem.get(tem.get(j))!=null)
						{
							ItemClass mui=itemsitem.get(tem.get(j));
							code200+="\t\t"+cmp.get(i).name+"_item"+(j+1)+".setText(\""+mui.codeString+"\");\n";
							for(int k=0;k<mui.item.size();k++)
							{
								String temStr=mui.item.get(k);
								boolean hasListener=false;
								if(temStr.charAt(temStr.length()-1)=='&')
								{
									temStr=temStr.substring(0,temStr.length()-1);
									hasListener=true;
								}
								code200+="\t\tJMenuItem "+cmp.get(i).name+"_item"+(j+1)+"_it"+(k+1)+
								" =new JMenuItem(\""+temStr+"\");\n";
								if(hasListener)
									code200+="\t\t"+cmp.get(i).name+"_item"+(j+1)+"_it"+(k+1)+".addActionListener(new ActionListener()\n\t\t{\n"+
									"\t\t\t"+"public void actionPerformed(ActionEvent e)\n\t\t\t{\n\t\t\t"+
									"\t\t\t\tSystem.out.println(98765);\n\t\t\t"+"}\n\t\t});\n";
								code200+="\t\t"+cmp.get(i).name+"_item"+(j+1)+".add("+cmp.get(i).name+"_item"+(j+1)+"_it"+(k+1)+");\n";
							}
						}
					}
					else if(cmp.get(i).sort==SORT.TABBEDPANE)
					{
						code200+="\t\t"+cmp.get(i).name+".add(\""+tem.get(j)+"\",new JPanel());\n";
					}
				}
			}
			code3+="\t\tjp.add("+cmp.get(i).name+");\n";
			Rectangle2D tem2=cmp.get(i).border;
			int x=(int)tem2.getX();
			int y=(int)tem2.getY();
			int w=(int)tem2.getWidth();
			int h=(int )tem2.getHeight();
			String temStr="";
			if(cmp.get(i).sort<=5)
			{
				temStr="\""+cmp.get(i).text+"\"";
			}
			
			if(cmp.get(i).sort==SORT.LIST)
			{
				ArrayList<String> list001=this.item.get(cmp.get(i)).item;
				temStr="new String[]{";
				for(int k=0;k<list001.size()-1;k++)
				{
					temStr+="\""+list001.get(k)+"\",";
				}
				temStr+="\""+list001.get(list001.size()-1)+"\"}";
			}
			code4+="\t\t"+cmp.get(i).name+"=new "+SORT.CMP[cmp.get(i).sort]+"("+temStr+");\n";
			code4+="\t\t"+cmp.get(i).name+".setBounds("+x+","+y+","+w+","+h+");\n";
		}
		code4+="\t}\n";
		Rectangle2D tem1=this.range.border;
		int w=(int)tem1.getWidth();
		int h=(int)tem1.getHeight();
		String code50=
			"\tpublic MyFrame()\n"+
			"\t{" +"\n\t\tsuper(\"MyFrame\");\n"+
			"\t\tthis.setDefaultCloseOperation(3);\n"+
			"\t\tsetBounds(200,150,"+w+","+(h+20)+");\n"+
			"\t\tJPanel jp=new JPanel();\n"+
			"\t\tjp.setLayout(null);\n"+
			"\t\tinit();\n";//////////////////差后扩号
		
		String codingString=code1+code2+code50+code20+code200+code3+"\t\tsetContentPane(jp);\n"+
        "\t\tsetVisible(true);\n\t}\n"+code4+code21+"}";
		
		return codingString;
	}
	
	public void stateChanged(ChangeEvent e)
	{
		if(this.tab.getSelectedIndex()==1)
		{
			this.tea.setText(this.createCode());
			
			this.text_1.setEditable(false);
			this.text_2.setEditable(false);
			this.cbo_1.setEnabled(false);
			this.label_4.setEnabled(false);
			this.btn2.setEnabled(false);
			this.cbo_2.setEnabled(false);
			this.btn_tab.setEnabled(false);
			this.btn_list.setEnabled(false);
		}
		else
		{
			this.text_1.setEditable(true);
			this.text_2.setEditable(true);
			this.cbo_1.setEnabled(true);
			this.label_4.setEnabled(true);
			this.btn2.setEnabled(true);
			this.cbo_2.setEnabled(true);
			this.btn_tab.setEnabled(true);
			this.btn_list.setEnabled(true);
		}
	}
	
}

class MyPanel extends JPanel implements MouseListener,MouseMotionListener
{
	private static final long serialVersionUID = 100L;
	Graphics2D g=null;
	GUIBuilder outer=null;
	MyPanel(GUIBuilder e)
	{
		outer=e;
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
	}
	int find(Point2D p)
	{
		for(int i=0;i<outer.NUM;i++)
		{
			if(outer.components[i].contains(p))
			{
				return i;
			}
		}
		return -1;
	}
	public void paintComponent(Graphics e)
	{
		super.paintComponent(e);
		g=(Graphics2D)e;
		outer.drawComponents(g);
	}
	public void mouseClicked(MouseEvent e) {}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e)
	{
		outer.willPut=find(e.getPoint());
		outer.focusCMP=null;
		//System.out.println(outer.willPut);
		outer.label_1.setText("");
		outer.text_1.setText("");
		outer.text_2.setText("");
		outer.cbo_1.removeAllItems();
		outer.repaint();
	}
	public void mouseReleased(MouseEvent e) 
	{
		
	}
	public void mouseDragged(MouseEvent e) {}
	public void mouseMoved(MouseEvent e) 
	{
		if(find(e.getPoint())!=-1)
		{
			outer.cross();
		}
		else
		{
			outer.deletecross();
		}
	}
}

class MainPane extends JPanel implements MouseListener,MouseMotionListener
{

	private static final long serialVersionUID = 199L;
	Graphics2D g=null;
	GUIBuilder outer=null;
	Color b=new Color(100,200,100);
	MainPane(GUIBuilder e)
	{
		outer=e;
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
		this.setBackground(Color.white);
	}
	public void paintComponent(Graphics e)
	{
		super.paintComponent(e);
		g=(Graphics2D)e;
		outer.range.draw(g);
		outer.drawLine(g);
		g.setColor(b);
		outer.drawViewComponent(g);
	}
	
	public void mouseClicked(MouseEvent e) {}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	
	public void mousePressed(MouseEvent e) 
	{
		outer.label_1.requestFocus();///////////////////////////////////////////////////
		
		int count =e.getClickCount();
		if(outer.willPut==-1)
		{
			if(outer.findRange(e.getPoint()))
			{
				outer.dragRange=true;
			}
			else 
			{
				
				if((outer.dragingSize=outer.findComponent(e.getPoint()))!=null)
				{
					if(count<2)
					{
						if(outer.setSizeFlag==true)
						{
							outer.focusCMP=outer.dragingSize;
						}
						else
						{
							outer.focusCMP=outer.dragingSize;
							outer.draging=outer.dragingSize;
							outer.dragingSize=null;
						}
						outer.label_1.setText("   "+outer.SORT.CMP[outer.focusCMP.sort]);
						outer.text_1.setText(outer.focusCMP.name);
						outer.text_2.setText(outer.focusCMP.text);
						int st=outer.focusCMP.sort;
						ArrayList<Integer> temlist=outer.RELATION.CMP[st];
						outer.cbo_1.removeAllItems();
						for(int i=0;i<temlist.size();i++)
						{
							outer.cbo_1.addItem(outer.LISTENER.NAME[temlist.get(i)]);
						}
					}
					else
					{
						System.out.println(outer.focusCMP.id);
						//System.out.println(outer.itemsitem.size());
						if(outer.focusCMP.sort==outer.SORT.JMENUBAR)
						{
							GUIBuilder.ItemClass itm=outer.item.get(outer.focusCMP);
							if(itm!=null)
							{
								ArrayList<String>temList=itm.item;
								for(int k=0;k<temList.size();k++)
								{
									if(outer.itemsitem.get(temList.get(k))!=null)
										outer.itemsitem.remove(temList.get(k));
								}
							}
						}
						outer.removeCMP(outer.focusCMP);
						outer.label_1.setText("");
						outer.text_1.setText("");
						outer.text_2.setText("");
						outer.cbo_1.removeAllItems();
						outer.repaint();
						//System.out.println(outer.itemsitem.size());
					}
				}
				
				else
				{
				}
			}
		}
		else
		{
			Point2D p=e.getPoint();
			outer.put.setFrame(p.getX()-5, p.getY()-5, 10, 10);
			outer.getNearestPoint();
			outer.cmp.add((outer.focusCMP=new MyComponent(outer.nearest,outer.willPut,outer.maxID,outer)));
			outer.maxID++;
			outer.willPut=-1;
			outer.label_1.setText("   "+outer.SORT.CMP[outer.focusCMP.sort]);
			outer.text_1.setText(outer.focusCMP.name);
			outer.text_2.setText(outer.focusCMP.text);
			int st=outer.focusCMP.sort;
			ArrayList<Integer> temlist=outer.RELATION.CMP[st];
			outer.cbo_1.removeAllItems();
			for(int i=0;i<temlist.size();i++)
			{
				outer.cbo_1.addItem(outer.LISTENER.NAME[temlist.get(i)]);
			}
			outer.repaint();
		}
	}
	public void mouseReleased(MouseEvent e)
	{
		
		if(outer.dragRange==true)
		{
			outer.setBorderLocation();
		}
		else
		{
			if(outer.draging!=null)
			{
				Point2D p=e.getPoint();
				outer.put.setFrame(p.getX()-5, p.getY()-5, 10, 10);
				outer.getNearestPoint();
				if(outer.dragingCMP==true)
				{
					outer.draging.setLocation(outer.nearest);
					
				}
			}
			else if(outer.dragingSize!=null)
			{
				Point2D p=e.getPoint();
				outer.put.setFrame(p.getX()-5, p.getY()-5, 10, 10);
				outer.getNearestPoint();
				outer.dragingSize.setSize(outer.nearest);
			}
		}
		outer.draging=null;
		outer.dragingSize=null;
		outer.dragRange=false;
		outer.dragingCMP=false;
		repaint();
	}
	public void mouseDragged(MouseEvent e) 
	{
		//outer.put.setFrame(e.getPoint().getX()-5, e.getPoint().getY()-5, 10, 10);
		
		if(outer.dragRange==true)
		{
			outer.range.setRange(e.getPoint());
			outer.repaint();
		}
		else
		{
			if(outer.draging!=null)
			{
				outer.draging.setLocation(e.getPoint());
				outer.dragingCMP=true;
				outer.repaint();
			}
			else if(outer.dragingSize!=null)
			{
				outer.dragingSize.setSize(e.getPoint());
				outer.dragingCMP=true;
				outer.repaint();
			}
		}
	}
	public void mouseMoved(MouseEvent e) 
	{
		//outer.put.setFrame(e.getPoint().getX()-5, e.getPoint().getY()-5, 10, 10);
		
		if(outer.findRange(e.getPoint()))
		{
			outer.changesize();
		}
		else if(outer.findComponent(e.getPoint())!=null)
		{
			if(outer.setSizeFlag==true)
			{
				outer.changesize();
			}
			else
			{
				outer.cross();
			}
		}
		else
		{
			outer.deletecross();
		}
	}
}

class Range
{
	Rectangle2D border=new Rectangle2D.Double(0,0,300,300);
	Color cor=new Color(150,150,150);
	Rectangle2D dragArea=new Rectangle2D.Double(290,290,10,10);
	
	public void setRange(Point2D p)
	{
		double x=p.getX();
		double y=p.getY();
		if(x>100&&y>100)
		{
			border.setFrame(0,0,x,y);
			dragArea.setFrame(x-10, y-10, 10, 10);
		}
		else
		{
			border.setFrame(0,0,100,100);
			dragArea.setFrame(90, 90, 10, 10);
		}
	}
	
	public void draw(Graphics2D g)
	{
		g.setColor(cor);
		g.fill(this.border);
		
	}
}

class MyPoint
{
	Point2D point=null;
	Color cor=Color.orange;
	Ellipse2D circle=new Ellipse2D.Double();
	MyPoint(Point2D p )
	{
		point=p;
		double x=p.getX();
		double y=p.getY();
		circle.setFrameFromCenter(x, y, x+2, y+2);
	}
	void draw(Graphics2D g)
	{
		g.setColor(Color.pink);
		g.draw(circle);
	}
}

class MyComponent
{
	int id=0;
	int sortID=1;
	String name=null;
	String text=null;
	int sort=-1;
	Rectangle2D border=null;
	Point2D point=null;
	Rectangle2D dragSize=null;
	GUIBuilder outer=null;
	
	MyComponent(Point2D p,int theSort,int ID,GUIBuilder out)
	{
		point=p;
		sort=theSort;
		id=ID;
		outer=out;
		border=new Rectangle2D.Double(p.getX()-20,p.getY()-10,40,20);
		dragSize=new Rectangle2D.Double(border.getMaxX()-10,border.getMaxY()-10,10,10);
		setName();
		setText(name);
	}
	void setName()
	{
		name=outer.getName(this);
	}
	void setText(String t)
	{
		text=t;
	}
	void setLocation(Point2D p)
	{
		double x=p.getX();
		double y=p.getY();
		double w=border.getWidth();
		double h=border.getHeight();
		double t1=w/2;
		double t2=h/2;
		if(t1%10==5)
		{
			t1+=5;
		}
		if(t2%10==5)
		{
			t2+=5;
		}
		border.setFrame(x-t1, y-t2, w, h);
		dragSize=new Rectangle2D.Double(border.getMaxX()-10,border.getMaxY()-10,10,10);
	}
	
	void setSize(Point2D p)
	{
		double x=border.getX();
		double y=border.getY();
		if(p.getX()-x>10&&p.getY()-y>10)
		{
			border.setFrame(x, y, p.getX()-x, p.getY()-y);
			dragSize=new Rectangle2D.Double(border.getMaxX()-10,border.getMaxY()-10,10,10);
		}
		else
		{
			border.setFrame(x, y, 10, 10);
			dragSize=new Rectangle2D.Double(x,y,10,10);
		}
	}
}

class Sort
{
	final int LABEL=0;//标签
	final int TEXT=1;//文本框
	final int TEXTAREA=2;//区域
	final int BUTTON=3;//按钮
	final int RADIO=4;//单选
	final int CHECKBOX=5;//复选
	final int COMBOBOX=6;//下拉
	final int SCROLLPANE=7;//JScrollPane
	final int PANEL=8;//JPanel
	final int PASSWORD=9;//JPasswordField
	final int LIST=10;//JList
	final int SPINNER=11;//JSpinner
	final int SLIDER=12;//JSlider
	final int PROGRESS=13;//JProgressBar
	final int TABBEDPANE=14;//JTabbedPane
	final int JMENUBAR=15;//
	/////////////////////////////////////////////////////////////
	final String[] NAME=new String[16];////名字
	final String[] CMP=new String[16];/////组件名字
	Sort()
	{
		NAME[0]="lb";
		NAME[1]="tx";
		NAME[2]="ta";
		NAME[3]="bt";
		NAME[4]="rad";
		NAME[5]="chx";
		NAME[6]="cbo";
		NAME[7]="scr";
		NAME[8]="pan";
		NAME[9]="pass";
		NAME[10]="list";
		NAME[11]="spd";
		NAME[12]="sld";
		NAME[13]="pro";
		NAME[14]="tab";
		NAME[15]="menu";
		//////////////////////////////////////////////////////////
		CMP[0]="JLabel";
		CMP[1]="JTextField";
		CMP[2]="JTextArea";
		CMP[3]="JButton";
		CMP[4]="JRadioButton";
		CMP[5]="JCheckBox";
		CMP[6]="JComboBox";/////////////////////////下拉列表
		CMP[7]="JScrollPane";
		CMP[8]="JPanel";
		CMP[9]="JPasswordField";
		CMP[10]="JList";
		CMP[11]="JSpinner";
		CMP[12]="JSlider";
		CMP[13]="JProgressBar";
		CMP[14]="JTabbedPane";
		CMP[15]="JMenuBar";
	}
	
}
class CmpSort
{
	final String[] STRINGS=new String[16];////////////////////////////
	
	final String LABEL="标签";
	final String TEXT="文本框";
	final String TEXTAREA="TextArea";
	final String BUTTON="按钮";
	final String RADIO="单选按钮";
	final String CHECKBOX="复选框";
	final String COMBOBOX=    "组合框";
	final String SCROLLPANE="ScrollP";
	final String PANEL="Panel";
	final String PASSWORD="密码框";
	final String LIST="ListBox";
	final String SPINNER="微调按钮";
	final String SLIDER="滑块";
	final String PROGRESS="进度条";
	final String TABBEDPANE="选项卡";
	final String JMENUBAR="菜单栏";
	
	CmpSort()
	{
		STRINGS[0]=LABEL;	
		STRINGS[1]=TEXT;
		STRINGS[2]=TEXTAREA;
		STRINGS[3]=BUTTON;
		STRINGS[4]=RADIO;		
		STRINGS[5]=CHECKBOX;		
		STRINGS[6]=COMBOBOX;		
		STRINGS[7]=SCROLLPANE;		
		STRINGS[8]=PANEL;		
		STRINGS[9]=PASSWORD;		
		STRINGS[10]=LIST;
		STRINGS[11]=SPINNER;		
		STRINGS[12]=SLIDER;
		STRINGS[13]=PROGRESS;
		STRINGS[14]=TABBEDPANE;		
		STRINGS[15]=JMENUBAR;
	}
}

class Listeners
{
	final String[] NAME=new String[7];
	Listeners()
	{
		NAME[0]="ActionListener";
		NAME[1]="FocusListener";
		NAME[2]="ChangeListener";
		NAME[3]="MouseListener";
		NAME[4]="KeyListener";
		NAME[5]="ListSelectionListener";
		NAME[6]="ItemListener";
	}
	final int ACT=0;
	final int FOC=1;
	final int CHA=2;
	final int MOU=3;
	final int KEY=4;
	final int LIS=5;
	final int ITM=6;
}

class ListenerMethod
{
	final String [] TEXT=new String[7];
	final String HEAD="\tclass ";
	ListenerMethod()
	{
		TEXT[0]= " implements ActionListener\n"+
	    "\t{\n"+
			"\t\tpublic void actionPerformed(ActionEvent e)\n"+
		"\t\t{\n\t\t\tSystem.out.println(111111);\n"+"\t\t}\n"+
	    "\t}\n";
		TEXT[1]=  " implements FocusListener\n"+
		"\t{\n"+
		"\t\tpublic void focusGained(FocusEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t\tpublic void focusLost(FocusEvent e)\n"+
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t}\n";
		TEXT[2]=" implements ChangeListener\n"+
		"\t{\n"+
		"\t\tpublic void stateChanged(ChangeEvent e)\n"+ 
		"\t\t{\n"+"\t\t}\n"+
	    "\t}\n";
		TEXT[3]=" implements MouseListener\n"+
		"\t{\n"+
		"\t\tpublic void mouseClicked(MouseEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t\tpublic void mouseEntered(MouseEvent e)\n"+
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t\tpublic void mouseExited(MouseEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t\tpublic void mousePressed(MouseEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t\tpublic void mouseReleased(MouseEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t}\n";
		TEXT[4]=" implements KeyListener\n"+
    "\t{\n"+
		"\t\tpublic void keyPressed(KeyEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t\tpublic void keyReleased(KeyEvent e)\n"+
		"\t\t{\n"+
			
		"\t\t}\n"+
		"\t\tpublic void keyTyped(KeyEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
    "\t}\n";
		TEXT[5]=" implements ListSelectionListener\n"+
    "\t{\n"+
		"\t\tpublic void valueChanged(ListSelectionEvent e)\n"+ 
		"\t\t{\n"+
			
		"\t\t}\n"+
    "\t}\n";
		TEXT[6]= " implements ItemListener\n"+
	    "\t{\n"+
		"\t\tpublic void itemStateChanged(ItemEvent e)\n"+
	"\t\t{\n\t\t\tSystem.out.println(111111);\n"+"\t\t}\n"+
    "\t}\n";
	}
}

@SuppressWarnings("unchecked")
class Relations
{
	ArrayList<Integer> [] CMP=new ArrayList[16];
	
	Relations()
	{
		CMP[0]=new ArrayList<Integer>();
		(CMP[1]=new ArrayList<Integer>()).add(1);
		(CMP[2]=new ArrayList<Integer>()).add(1);
		(CMP[3]=new ArrayList<Integer>()).add(0);
		CMP[4]=new ArrayList<Integer>();
		CMP[4].add(0);
		CMP[4].add(1);
		CMP[4].add(2);
		CMP[4].add(3);
		CMP[4].add(4);
		CMP[5]=new ArrayList<Integer>();
		CMP[5].add(0);
		CMP[5].add(1);
		CMP[5].add(2);
		CMP[5].add(3);
		CMP[5].add(4);
		CMP[6]=new ArrayList<Integer>();
		CMP[6].add(6);
		CMP[7]=new ArrayList<Integer>();
		CMP[8]=new ArrayList<Integer>();
		CMP[8].add(3);
		CMP[8].add(4);
		CMP[9]=new ArrayList<Integer>();
		CMP[9].add(1);
		CMP[10]=new ArrayList<Integer>();
		CMP[10].add(5);
		CMP[11]=new ArrayList<Integer>();
		CMP[11].add(2);
		CMP[12]=new ArrayList<Integer>();
		CMP[12].add(2);
		CMP[13]=new ArrayList<Integer>();
		CMP[13].add(2);
		CMP[14]=new ArrayList<Integer>();//"JTabbedPane";
		CMP[14].add(2);
		CMP[15]=new ArrayList<Integer>();//"JMenuBar";
		CMP[15]=new ArrayList<Integer>();
	}
}

点击左边的按钮,变成红色后,点右边的画布 ,就放上去了。

所有组建,右下角可以拖拽大小。。。

生成的代码, 类叫MyFrame,只要建立一个MYFrame.java,代码放进去,
直接在mian 中new MyFrame(); 运行生成的代码。

这玩意儿怎么用的话,运行了,乱点一气,就知道了。。

【上篇】
【下篇】

抱歉!评论已关闭.