Desenho em JFrame com eventos do mouse

1 resposta
R

Olá Pessoal! Estou desenvolvendo um código para realizar desenhos a partir de retas pré-definidas. Estou com dois problemas que não consigo resolver.

Problema 1 - como faço para por este código:

import java.awt.*;     
 import java.awt.event.*;     
 import javax.swing.*;     
      
      
 public class DesenhoRetas extends JFrame implements MouseListener{   
      
   private int x1 = 60, y1 = 60, x2 = 60, y2 = 60, tamanhoParede = 150;   
      
    public DesenhoRetas(){   
      setSize(900,650);   
         this.addMouseListener(this);   
         setVisible(true);   
    }     
    public void paint(Graphics g){   
       super.paint(g);   
       g.setColor(Color.BLACK);   
       g.drawLine(x1, y1, x2 /*+ tamanhoParede*/, y2 + tamanhoParede);   
          
    }          
    public void mouseClicked(MouseEvent e) {   
       x1 = e.getX();    
          y1 = e.getY();   
          x2 = e.getX() /* + tamanhoParede*/;   
          y2 = e.getY() + tamanhoParede;   
          this.repaint();     
    }   
  
    public void mouseEntered(MouseEvent e) {   
    }     
      
    public void mouseExited(MouseEvent e) {   
    }     
      
    public void mousePressed(MouseEvent e) {       
    }     
      
    public void mouseReleased(MouseEvent e) {   
    }     
      
 public static void main(String args[]){     
    DesenhoRetas app = new DesenhoRetas();   
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
 }     
 }

Limitado no espaço do JPanel desta interface gráfica:

package javaapplication1;   
import java.awt.*;   
import java.awt.event.*;   
import javax.swing.*;   
  
public class NewJFrame extends JFrame implements MouseListener {   
  
    private int x1 = 60, y1 = 60, x2 = 60, y2 = 60, tamanhoParede = 150;   
  
    /** Creates new form NewJFrame */  
    public NewJFrame() {   
        initComponents();   
    }   
  
    @SuppressWarnings("unchecked")   
    // <editor-fold defaultstate="collapsed" desc="Generated Code">   
    private void initComponents() {   
  
        jButton1 = new javax.swing.JButton();   
        jLabel3 = new javax.swing.JLabel();   
        jLabel4 = new javax.swing.JLabel();   
        jTextField1 = new javax.swing.JTextField();   
        jLabel5 = new javax.swing.JLabel();   
        jButton2 = new javax.swing.JButton();   
        jPanel1 = new javax.swing.JPanel();   
  
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);   
  
        jButton1.setText("Desenhar Linha");   
        jButton1.addActionListener(new java.awt.event.ActionListener() {   
            public void actionPerformed(java.awt.event.ActionEvent evt) {   
                jButton1ActionPerformed(evt);   
            }   
        });   
  
        jLabel3.setText("DEFINA O COMPRIMENTO");   
  
        jLabel4.setText("DA PAREDE DESENHADA:");   
  
        jTextField1.addActionListener(new java.awt.event.ActionListener() {   
            public void actionPerformed(java.awt.event.ActionEvent evt) {   
                jTextField1ActionPerformed(evt);   
            }   
        });   
  
        jLabel5.setText("Metros");   
  
        jButton2.setText("Confirmar Linha");   
        jButton2.addActionListener(new java.awt.event.ActionListener() {   
            public void actionPerformed(java.awt.event.ActionEvent evt) {   
                jButton2ActionPerformed(evt);   
            }   
        });   
  
        jPanel1.setBackground(new java.awt.Color(255, 255, 255));   
  
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);   
        jPanel1.setLayout(jPanel1Layout);   
        jPanel1Layout.setHorizontalGroup(   
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
            .addGap(0, 467, Short.MAX_VALUE)   
        );   
        jPanel1Layout.setVerticalGroup(   
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
            .addGap(0, 352, Short.MAX_VALUE)   
        );   
  
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());   
        getContentPane().setLayout(layout);   
        layout.setHorizontalGroup(   
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()   
                .addContainerGap()   
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
                    .addComponent(jLabel3)   
                    .addComponent(jLabel4)   
                    .addGroup(layout.createSequentialGroup()   
                        .addGap(6, 6, 6)   
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)   
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)   
                        .addComponent(jLabel5)   
                        .addGap(35, 35, 35))   
                    .addComponent(jButton1)   
                    .addComponent(jButton2))   
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 40, Short.MAX_VALUE)   
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)   
                .addContainerGap())   
        );   
        layout.setVerticalGroup(   
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
            .addGroup(layout.createSequentialGroup()   
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)   
                    .addGroup(layout.createSequentialGroup()   
                        .addContainerGap()   
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))   
                    .addGroup(layout.createSequentialGroup()   
                        .addGap(72, 72, 72)   
                        .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 9, javax.swing.GroupLayout.PREFERRED_SIZE)   
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)   
                        .addComponent(jLabel4)   
                        .addGap(18, 18, 18)   
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)   
                            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)   
                            .addComponent(jLabel5))   
                        .addGap(18, 18, 18)   
                        .addComponent(jButton1)   
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)   
                        .addComponent(jButton2)))   
                .addContainerGap())   
        );   
  
        pack();   
    }// </editor-fold>   
  
    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:   
    }                                              
  
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:   
    }                                           
  
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:   
    }                                           
       
    public static void main(String args[]) {   
        java.awt.EventQueue.invokeLater(new Runnable() {   
            public void run() {   
                new NewJFrame().setVisible(true);   
            }   
        });   
    }   
  
    // Variables declaration - do not modify   
    private javax.swing.JButton jButton1;   
    private javax.swing.JButton jButton2;   
    private javax.swing.JLabel jLabel3;   
    private javax.swing.JLabel jLabel4;   
    private javax.swing.JLabel jLabel5;   
    private javax.swing.JPanel jPanel1;   
    private javax.swing.JTextField jTextField1;   
    // End of variables declaration   
  
}

E o segundo problema é fixar no desenho, a partir da ação de um botão, as retas que serão desenhadas.

Por favor, alguém me ajude!!!

1 Resposta

ViniGodoy

Ao invés de sobrescrever o método paint do JFrame, sobrescreva o paintComponent de um JPanel. Depois, basta posicionar esse JPanel onde você quiser do seu JFrame.

Criado 19 de março de 2011
Ultima resposta 20 de mar. de 2011
Respostas 1
Participantes 2