说实话,写的挺烂的,本来想做好点,半途而废了,懒,
里面最复杂的功能是菜单栏目,点击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(); 运行生成的代码。
这玩意儿怎么用的话,运行了,乱点一气,就知道了。。