Salve galera.
Eh o seguinte, eu tenho uma classe que extende um JPanel, que seria o q eu vou desenhar usando Java2D - Graphics2D. Tem o nome de JPanelDesktopWork.
O meu JFrame extende esse JPanel que é apenas uma área de trabalho, q como disse é o q ira desenhar.
No meu JFrame eu tenho varios outros JPanels q seriam os panelControle(formas geometricas), panelText(fontes, cores, tamanhos), e o panelColor(cores)…enfim as ferramentas para se trabalhar.
Minha pergunta é, como eu faço por exemplo, para quando clicar no panelControle(no botao line), eu consiga desenhar nesse JPanelDesktopWork.
aqui como estou fazendo.
//aqui o FramePrincipal - JFrame
public class FramePrincipal extends javax.swing.JFrame {
JTabbedPane jTP; //controla JPanelDesktopWork
ArrayList<JPanelDesktopWork> listDeskWork = new ArrayList<JPanelDesktopWork>();
/** Creates new form FramePrincipal */
public FramePrincipal() {
new MetodosDiversos().setLookandFeel();
initComponents();
begin(); //invoca metodo de criacao area trabalho
}
public void begin(){
this.setExtendedState(MAXIMIZED_BOTH);
this.setLayout(new BorderLayout());
this.add(panelNorth, BorderLayout.NORTH);
this.jTP = new JTabbedPane();
this.getContentPane().add(this.jTP, BorderLayout.CENTER);
int location = JTabbedPane.BOTTOM;
this.jTP.setTabPlacement(location);
this.add(panelSouth, BorderLayout.SOUTH);
getFonts();
addDeskArea();
}
public void getFonts(){ //pega todas as fontes do sistema operacional e as coloca num JComboBox
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
for(String f : fonts){
this.jcomboFonts.addItem(f);
}
}
public void addDeskArea(){
DesktopArea deskArea = new DesktopArea(this.jTP);
JPanelDesktopWork deskWork = new JPanelDesktopWork(this);
this.listDeskWork.add(deskWork);
this.jTP.add(deskWork);//aqui onde eu add o JPanelDeskWork
this.jTP.setTabComponentAt(jTP.getTabCount() -1, deskArea);
this.jTP.setSelectedIndex(jTP.getTabCount() -1);
}
//aqui o JPanelDesktopWork - Onde devera se fazer os desenhos, trocar cores, fontes etc...
public class JPanelDesktopWork extends JPanel implements MouseListener, MouseMotionListener{
private FramePrincipal frame;
public JPanelDesktopWork(FramePrincipal frame){
this.setFramePrincipal(frame);
this.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D)g;
}
public Graphics2D getGraphics(){
return this.getGraphics();
}
/* mouse coordinate */
public String showCoordinates(MouseEvent e){
String x = "";
String y = "";
if(e.getX() < 0){
x = "0";
}else {
x = String.valueOf(e.getX());
}
if(e.getY() < 0 ){
y = "0";
}else{
y = String.valueOf(e.getY());
}
String coordinate = ("x:" +x + " y:" + y);
return coordinate;
}
/* return coordinate */
@Override
public void mouseClicked(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void mousePressed(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void mouseReleased(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void mouseEntered(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
showCoordinates(e);
}
@Override
public void mouseExited(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
showCoordinates(e);
}
@Override
public void mouseDragged(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void mouseMoved(MouseEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
this.frame.setCoordenadas(showCoordinates(e));
}
public void setFramePrincipal(FramePrincipal frame){
this.frame = frame;
}
public FramePrincipal getFramePrincipal(){
return this.frame;
}
}
Eu fiz mandando os botoes para o JPanelDesktopWork, funciona…Mas vai ficando muito codigo dentro de apenas uma classe. Acho que o ideal seria criar algo do tipo, se quiser desenhar uma linha, ter uma classe com todos os metodos de linhas, como tipo, cor, coordenadas etc…etc. O mesmo para outras ferramentas, como texto, retangulos etc. Acho q seria a melhor forma, porem ainda naum estou conseguindo fazer. E tbm nao sei como fazer isso para desenhar dentro do JPanelDesktopWork(area de desenho)
veja a tela principal do projeto: http://www.4shared.com/photo/KixYGT9l/projeto.html
a area pintada de preto eh o JPanelDesktopWork q me refiro, onde ira fazer os desenhos geometricos qdo se clica no botao da figura geometrica a q se quer desenhar.
obrigado.