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]
-------------------------------------------------------------------------