Вы создаете 2 экземпляра AreaForText, а это не то, что вы хотите сделать.Один добавляется в JFrame, а другой - в прослушиватель.Таким образом, тот, который фактически получает события мыши и вызывает перерисовку, - это не тот объект, который отображается.
Некоторая часть вашей организации кода не самая лучшая.У вас есть подкласс JPanel, который создает собственный JFrame и помещает себя в панель.Вы должны просто передать JFrame, если вам это действительно нужно.Я сделал несколько изменений ниже.
РЕДАКТИРОВАТЬ .Я исправил некоторые вещи со слушателем мыши, вы получили неправильные координаты X / Y, а также вы должны просто добавить слушателя непосредственно на панель, а не JFrame, чтобы вам не приходилось переводитькоординаты.
РЕДАКТИРОВАНИЕ Я изменил метод рисования на paintComponent, который является предпочтительным методом для переопределения здесь.Для получения дополнительной информации ознакомьтесь с Swing Paint Tutorial .
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.MouseInfo;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
class AreaForText extends JPanel implements MouseListener {
private int xpos;
private int ypos;
public AreaForText() {
super();
this.addMouseListener(this);
}
public void mouseClicked(MouseEvent me) {
// Save the coordinates of the click lke this.
xpos = me.getX();
ypos = me.getY();
System.out.print("Click" + " x: " + xpos + " y: " + ypos);
repaint();
}
public void mouseEntered(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.print("hello");
g.drawString("Hello World", 30, 80);
g.fillRect(20, 20, 20, 20);
g.drawString("(" + xpos + "," + ypos + ")", xpos, ypos);
}
}
class EnlargeText {
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame myJFrame = new JFrame("Bigger Text!");
myJFrame.setSize(300, 150);
myJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myJFrame.getContentPane().add(new AreaForText());
myJFrame.setVisible(true);
}
});
}
}