Olá pessoal, tudo bom?
Estou desenvolvendo um programa que realiza animações com sequencia de desenhos.
Eu gostaria de implementar o seguinte recurso: tenho um painel no centro onde o usuário desenha as figuras e queria que na barra de ferramentas na parte inferior da tela fosse criada uma miniatura dos desenhos que faço no painel principal.
Alguem ja trabalhou ou desenvolveu esse tipo de ferramenta? Gostaria que vocês me ajudassem com sugestões de como solucionar esse problema.
A lógica parece ser simples: basta eu criar uma cópia da área de desenho e redimensiona-la para mostrar na barra inferior, mas não consegui redimensionar corretamente.
Então cara, to ligado que tem como tu obter a imagem de um painel, porém não sei de cabeça (nada que o google não saiba), porém para redimensionar imagem eu tenho aqui um método que faz certinho.
Cara, valeu pela ajuda…tb iria precisar redimensionar imagens…
vou pesquisar aqui tb como gerar uma cópia do painel…se eu conseguir eu coloco a solução aqui…
se alguem souber tb e poder compatilhar, eu ficaria grato…
vlw…
até mais
sjoaquim
Mas qual é a classe desse painel? É uma classe do tipo Graphics2D?
luistiagos
pelo que eu vejo vc esta querendo fazer algo que nem o movie maker, adobe premier e coisa do genero… so posso dizer uma coisa… tu vai sofrer pra fazer algo assim… não é tão simples como pensa…
V
vmsb11
É a classe JPanel…tenho um panel onde fica como área de desenho…
e o usuário pode desenhar figuras…até ai tudo bem…
oque eu quero fazer eh gerar uma cópia dessa área de desenho e mostrar na parte inferior da janela mas numa resolução menor (miniatura) .
luistiagos
cara para este tipo de coisa é melhor vc fazer em C
V
vmsb11
até gostaria amigo de fazer em C…mas eh um trabalho da faculdade…eh obrigatório desenvolver em java … mas eh bom para adquirir conhecimentos na parte gráfica do java.
Bom amigo, pelo oque eu entendi, este método ele cria uma imagem… mas ele gera uma copia do conteudo corrente que esta dentro do JPanel?
Estou sem a possibilidade de testar no momento porq estou num pc sem java
Até mais.
sjoaquim
É, realmente esse método não funciona do jeito que esperava.
Mas fiz outro teste que funcionou, utilizando também o método que silveta enviou, além de uns outros "truques". :D
Depois roda na sua máquina pra testar!
[]s
packagebr.com.teste;importjava.awt.Component;importjava.awt.GridLayout;importjava.awt.Image;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.image.BufferedImage;importjava.util.HashMap;importjava.util.Map;importjava.util.SortedMap;importjava.util.TreeMap;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.border.BevelBorder;publicclassCopyWindowContents{privateJFramewindow;JPanelmainPanel;privateSortedMap<String,Component>components;privateMap<String,MouseListener>listeners;publicCopyWindowContents(){window=newJFrame("Janela");components=newTreeMap<String,Component>();listeners=newHashMap<String,MouseListener>();mainPanel=newJPanel();components.put("component",newJLabel("Esse texto vai ser copiado"));components.put("button",newJButton("Copiar"));for(Componentcomponent:components.values()){mainPanel.add(component);}mainPanel.setLayout(newGridLayout(2,2));window.setContentPane(mainPanel);listeners.put("buttonListener",newMouseAdapter(){privateintcurrentCopy=1;@OverridepublicvoidmouseClicked(MouseEvente){super.mouseClicked(e);intiWidth=mainPanel.getPreferredSize().width;intiHeight=mainPanel.getPreferredSize().height;Imagebi=getPanelCopy(iWidth,iHeight);JLabelcopyComponent=newJLabel(newImageIcon(applyScale(bi,iWidth/2,iHeight/2,Image.SCALE_SMOOTH)));copyComponent.setBorder(newBevelBorder(BevelBorder.RAISED));components.put("newCopy"+currentCopy,copyComponent);mainPanel.add(copyComponent);currentCopy++;mainPanel.repaint();window.pack();}});components.get("button").addMouseListener(listeners.get("buttonListener"));window.setBounds(100,100,200,500);window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);window.pack();window.setVisible(true);}publicImagegetPanelCopy(intiWidth,intiHeight){BufferedImagebi=newBufferedImage(iWidth,iHeight,BufferedImage.TYPE_INT_RGB);mainPanel.paint(bi.getGraphics());returnbi;}publicstaticImageapplyScale(finalImageimg,finalintwidth,finalintheight,finalinthint){finalintproportionalWidth;finalintproportionalHeight;img.getHeight(null);finaldoublecontainerRate=height/(double)width;finaldoubleimgRate=img.getHeight(null)/(double)img.getHeight(null);if(imgRate>containerRate){proportionalWidth=-1;proportionalHeight=height;}else{proportionalWidth=width;proportionalHeight=-1;}returnimg.getScaledInstance(proportionalWidth,proportionalHeight,hint);}publicstaticvoidmain(String[]args){newCopyWindowContents();}}
V
vmsb11
Olá amigo, instalei o eclipse que vem com o jdk embutido e testei e realmente funcionou…
muito obrigado pela ajuda, quando terminar de desenvolver o programa eu posto ele aqui para vc’s verem.