Note that there are some explanatory texts on larger screens.

plurals
  1. POMouseEvent on JPanel - wrong coordinate
    text
    copied!<p>I have written the following micro-paintbrush program in Java: </p> <pre><code>import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; class AuxClass1 extends JFrame implements MouseListener, MouseMotionListener{ private JPanel panel1 = new JPanel(); private JPanel panel2 = new JPanel(); private JLabel label1_x = new JLabel(); private JLabel label1_y = new JLabel(); private JLabel label1_x_info = new JLabel(""); private JLabel label1_y_info = new JLabel(""); //add a container keep panels with widgets private Container con1 = getContentPane(); private int xval1; private int yval1; private GridLayout layout1 = new GridLayout(2,2,2,2); private JOptionPane info1 = new JOptionPane(); //get the class that controls the mouse public AuxClass1(){ super("Mouse Experiment"); panel1.setBackground(Color.WHITE); panel1.setLayout(layout1); label1_x.setText("X Location"); label1_x.setBorder(BorderFactory.createLineBorder(Color.BLUE, 2)); label1_y.setBorder(BorderFactory.createLineBorder(Color.BLUE, 2)); label1_x_info.setBorder(BorderFactory.createLineBorder(Color.RED, 2)); label1_y_info.setBorder(BorderFactory.createLineBorder(Color.RED, 2)); label1_y.setText("Y Location"); panel1.add(label1_x); panel1.add(label1_y); panel1.add(label1_x_info); panel1.add(label1_y_info); con1.add(panel1, BorderLayout.NORTH); panel2.setBackground(new Color(100,200,200)); panel2.setBorder(BorderFactory.createLineBorder(new Color(255,255,0), 2)); panel2.addMouseListener(this); panel2.addMouseMotionListener(this); con1.add(panel2, BorderLayout.CENTER); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(500, 500); setLocationRelativeTo(null); setVisible(true); } @Override public void mouseClicked(MouseEvent arg0) { } @Override public void mouseMoved(MouseEvent arg0) { // TODO Auto-generated method stub if (arg0.getSource()==panel2){ x_var = arg0.getX(); y_var = arg0.getY(); label1_x_info.setText(Integer.toString(x_var)); label1_y_info.setText(Integer.toString(y_var)); } } @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub if (e.getSource()==panel2){ //info1.showMessageDialog(this, "This is an awesome Mouse toolbox!"); xval1 = e.getX(); yval1= e.getY(); AuxClass2 Inst2 = new AuxClass2(xval1, yval1); Inst2.paintComponent(getGraphics()); } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { if (arg0.getSource()==panel2){ label1_x_info.setText(""); label1_y_info.setText(""); } // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } } class AuxClass2 extends JPanel{ //JOptionPane info2 = new JOptionPane(); private int xval2; private int yval2; public AuxClass2(int input1, int input2){ xval2 = input1; yval2 = input2; setSize(500,500); } @Override public void paintComponent(Graphics g){ super.paintComponents(g); g.setColor(Color.BLUE); g.fillRect(xval2, yval2+70, 5, 5); } } public class MainClass{ private static AuxClass1 Inst1; public static void main(String args[]){ Inst1 = new AuxClass1(); } } </code></pre> <p>It works alright except for the Y coordinate of the mouseDragged method (see paintComponent method in class t3_aux2). For some reason the Y coordinate used by the method is ~70 pixels less than the actual one in panel2. I suspect this is something to do with the inherited JPanel method in t3_aux2 class but not too sure.</p> <p>If someone could clarify this point, it would be cool. Thanks. </p> <p>UPD: If anyone has suggestions on how to improve style and/or optimize code, that would be massively appreciated too. </p> <p>UPD2: Changed the names to comply with Java naming conventions. </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload