Idéias - Construíndo uma área de trabalho em swing!
7 respostas
Grinvon
Eu estava aqui pensando de como são feitas aquelas áreas de trabalho em swing, a exemplo de um report da vida como o Jasper, como eles fizeram aquela área? No matisse do NetBeans, e em tantos outros programas similares.
Então minha curiosidade aumentou, pensei em algo como um panel onde com as funções de drag e drop seria possível jogar componentes lá, fiz alguns exemplo, ficou simples, mas longe de uma área de trabalho como essas que falei. Não sei como eles fazem para deixar de um jeito tão diferente.
Muita implementação, não é tarefa fácil fazer um designer como o matisse, muito menos com a qualidade do mesmo!!
Grinvon
A minha idéia não era fazer um matisse 2, e nem quero isso, mas sim criar uma plataforma de trabalho parecida (no sentido de vc ter uma paleta de recusos e ícones e poder arrastar para essa plataforma), tipo em reports, programas gráficos ou mesmo matisse.
Grinvon
Vou tentar fazer alguns exemplos aqui, e talvez amanhã eu consiga postar.
porfirio
Sim, eu compreendi, apenas disse que fazer um visual designer, seja para o que for, envolve muito trabalho
Fernando_Generoso_da
pq não desenvolve plugins, para netbeans ou eclipse, e utiliza essas duas IDE’s como plataforma??
Grinvon
Pronto pessoal, já consegui criar os pontos da grid. Dessa forma no próximo exemplo que eu criar, farei um obtejo dragable tentar “fitar/fixar” na grid. Vejam esse exemplo de criação dos pontos.
Bom, um dia chego lá!
importjava.awt.Canvas;importjava.awt.Graphics;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JFrame;/** * O intúito desse fonte é fazer que construámos no formulário uma grid de milhares de pontos. * Os pontos servem para "prender" os componentes a serem arastados nele, dando a impressão que estão presos * em uma grid "grap to grid". Para isso é necessário usar recursos de Java2D para conseguir tal feito. * O próximo passo e fazer um componente dragable e que possa "fixar" nessa grid. * @author Inocêncio */publicclassFormBuilder01extendsJFrame{publicFormBuilder01(){setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,400);setTitle("Desenhando pontos...");Pointerpointer=newPointer();add(pointer);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){setVisible(false);dispose();System.exit(0);}});setVisible(true);}publicstaticvoidmain(String[]args){newFormBuilder01();}}classPointerextendsCanvas{Pointer(){}@Overridepublicvoidpaint(Graphicsg){inti=0;//desenhando as linhas e colunas//x - linhafor(intx=0;x<200;x++){//i - colunasfor(i=0;i<300;i++){g.fillArc(i*7,5*x,1,1,0,360);}}}}
Grinvon
Fiz um jlabel se mover na tela, agora o problema é sobreposição, já que tenho um grid de pontos, ela sobrepoem o JLabel, reparei quando limitei o tamanho da grid, o componente de label aparece na tela, mas se eu move-lo para o local da grid, resulta em sobreposição dela em relação ao label. Mas vou conseguir achar uma forma de resolver isso. Resolvendo isso, o próximo passo será fixar o componente na grid.
importjava.awt.Canvas;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.event.MouseEvent;importjava.awt.event.MouseMotionAdapter;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.BorderFactory;importjavax.swing.JFrame;importjavax.swing.JLabel;/** * @author Inocêncio */publicclassFormBuilder02extendsJFrame{publicFormBuilder02(){setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400,400);setTitle("Desenhando pontos...");//setando layout nulosetLayout(null);//criando um componente para ser arrastadofinalJLabelnome=newJLabel("Nome:");nome.setBounds(10,10,120,80);nome.setFont(newFont("arial",Font.BOLD,30));nome.setBorder(BorderFactory.createLineBorder(Color.BLACK));nome.addMouseMotionListener(newMouseMotionAdapter(){@OverridepublicvoidmouseDragged(MouseEvente){mouseDragDrop(e,nome);}});Pointerpointer=newPointer();pointer.setBounds(0,0,2000,2000);add(pointer);add(nome);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){setVisible(false);dispose();System.exit(0);}});setVisible(true);}publicvoidmouseDragDrop(MouseEvente,JLabelrotulo){intx=rotulo.getLocation().x;inty=rotulo.getLocation().y;rotulo.setLocation((e.getX()+x)-(rotulo.getWidth()/2),(e.getY()+y)-(rotulo.getHeight()/2));repaint();x=e.getX();y=e.getY();}publicstaticvoidmain(String[]args){newFormBuilder02();}}classPointerextendsCanvas{Pointer(){}@Overridepublicvoidpaint(Graphicsg){inti=0;//desenhando as linhas e colunas//x - linhafor(intx=0;x<200;x++){//i - colunasfor(i=0;i<300;i++){g.fillArc(i*7,5*x,1,1,0,360);}}}}