Olá:

   Criei um programinha (no JBuilder) em que ao clicar o mouse em uma posição 
do JPanel, além de fornecer a posição do mouse, também desenha um ponto nesta 
posição. Os valores da posição do Mouse parecem OK, o mesmo quanto à posiçao X 
do ponto. O problema é quanto a coordenada Y do ponto: este aparece sempre uns 
pixels acima da posição do mouse. Em termos de programação a coordenada Y do 
ponto é menos que a coordenada Y do Mouse. Tenho quase a certeza que esta  
diferença é igual a altura da barra de título.
   Ele funciona da seguinte forma: nos eventos MouseDragged e MouseEvent, seus 
respectivos métodos que os manipulam chamam o método criaPonto(MouseEvent) que 
passa as coordenadas do mouse para dois atributos globais (x, y) e depois chama 
o método repaint(). Como todos sabem, este chama paint(Graphics). Neste método 
é criado um retangulo através de g.drawRect(x, y, 1, 1). 
   (A propósito alguém conhece algum método melhor de se pintar um pixel na 
tela do que este?)
    Agradeço qualquer dica.

    Grato, 

    Rafael U. C. Afonso


A seguir disponibilizo os códigos-fontes do programa. Se acharem que há coisa 
demais nele a culpa é do JBuilder fica criando essas coisas. 

package testegrafico;

import javax.swing.UIManager;
import java.awt.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */

public class MousePonto {
  boolean packFrame = false;

  //Construct the application
  public MousePonto() {
    PintaPonto frame = new PintaPonto();
    //Validate frames that have preset sizes
    //Pack frames that have useful preferred size info, e.g. from their layout
    if (packFrame) {
      frame.pack();
    }
    else {
      frame.validate();
    }
    //Center the window
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height) {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width) {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, 
(screenSize.height - frameSize.height) / 2);
    frame.setVisible(true);
  }
  //Main method
  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e) {
      e.printStackTrace();
    }
    new MousePonto();
  }
}



package testegrafico;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */

public class PintaPonto extends JFrame {
  JPanel contentPane;
  JLabel statusBar = new JLabel();
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel pnlTela = new JPanel();
  int x, y;

  //Construct the frame
  public PintaPonto() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {
    //setIconImage(Toolkit.getDefaultToolkit().createImage
(PintaPonto.class.getResource("[Your Icon]")));
    contentPane = (JPanel) this.getContentPane();
    titledBorder1 = new TitledBorder("");
    border1 = BorderFactory.createEtchedBorder(Color.white,new Color(142, 142, 
142));
    contentPane.setLayout(borderLayout1);
    this.setSize(new Dimension(400, 300));
    this.setTitle("Exibição de Pontos do Mouse");
    statusBar.setBorder(border1);
    statusBar.setText(" ");
    pnlTela.addMouseMotionListener(new PintaPonto_pnlTela_mouseMotionAdapter
(this));
    pnlTela.addMouseListener(new PintaPonto_pnlTela_mouseAdapter(this));
    contentPane.add(statusBar, BorderLayout.SOUTH);
    contentPane.add(pnlTela, BorderLayout.CENTER);
  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void pnlTela_mouseMoved(MouseEvent e) {
  }

  void pnlTela_mousePressed(MouseEvent e) {
    criaPonto(e);
  }

  public void paint(Graphics g) {
    g.drawRect(x, y, 1, 1);
  }

  void pnlTela_mouseDragged(MouseEvent e) {
    criaPonto(e);
  }

  void criaPonto(MouseEvent e) {
    x = e.getX();
    y = e.getY();
    java.text.DecimalFormat df = new java.text.DecimalFormat("000");
    statusBar.setText("X = " + df.format(x) + ", Y = " + df.format(y));
    this.repaint();
  }
  private TitledBorder titledBorder1;
  private Border border1;
}

class PintaPonto_pnlTela_mouseMotionAdapter extends 
java.awt.event.MouseMotionAdapter {
  private PintaPonto adaptee;

  PintaPonto_pnlTela_mouseMotionAdapter(PintaPonto adaptee) {
    this.adaptee = adaptee;
  }
  public void mouseMoved(MouseEvent e) {
    adaptee.pnlTela_mouseMoved(e);
  }
  public void mouseDragged(MouseEvent e) {
    adaptee.pnlTela_mouseDragged(e);
  }
}

class PintaPonto_pnlTela_mouseAdapter extends java.awt.event.MouseAdapter {
  private PintaPonto adaptee;

  PintaPonto_pnlTela_mouseAdapter(PintaPonto adaptee) {
    this.adaptee = adaptee;
  }
  public void mousePressed(MouseEvent e) {
    adaptee.pnlTela_mousePressed(e);
  }
}

------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a