java - 如何在几个 JTextField 中显示鼠标的坐标?

标签 java swing jtextfield mouselistener mousemotionlistener

我是新来的,我是开发方面的初学者。我的问题是,我在 JPanel 内有几个 JTextField 控件,该控件也在 JFrame 内,并且文本字段不显示我通过一个方法传递的文本,我不知道为什么,因为它的来源非常简单。

问题

我想显示在一对文本字段中获得的 Canvas 的鼠标坐标。该 Canvas 位于一个像面板一样的框架内,其中包含几个文本字段。我将把 Canvas 的源代码放在这里,在 MouseMotionListener 中引用它。

public void addPosicionPuntero(){        

    addMouseMotionListener(new MouseMotionAdapter(){

        @Override     
        public void mouseMoved(MouseEvent evento){

            x1 = evento.getX();
            y1 = evento.getY(); 
            updateUI();
            panelCoordenadas pC = new panelCoordenadas();
            pC.mostrarCoordenadas(x1,y1);                
            System.out.println(x1 + " --- " + y1);                
        }

        @Override
        public void mouseDragged(MouseEvent evento){                
            mouseMoved(evento);
        }
    });        
} 

好吧,现在在其他类中包含文本字段的面板。

public class panelCoordenadas extends javax.swing.JPanel{    

JTextField txfX = new JTextField("X");
JTextField txfY = new JTextField("Y");


public panelCoordenadas() {  

    this.setSize(100, 100);
    //this.setBounds(60,50,100,60);
    this.setLocation(50, 50);
    this.setBackground(Color.yellow);
    JLabel coordX = new JLabel("coordX");
    JLabel coordY = new JLabel("coordY");
    add(coordX);
    add(coordY);                     

    txfX.setEditable(false);
    txfY.setEditable(false);
    txfX.setSize(40, 20);
    txfY.setSize(40, 20);        
    add(txfX);
    add(txfY);       
}    

public void mostrarCoordenadas(int x, int y){        
    txfX.setText(String.valueOf(x));        
    txfY.setText(String.valueOf(y));
    System.out.println("mostrarCoordenadas = " + x + " --- " + y); 
    updateUI();
}
}

我放置了一个 System.out 来了解它是否获取了数据。数据显示在屏幕上,但不显示在文本字段中。

如果有人知道问题是什么,我很乐意告诉我。

最佳答案

类名称不应以小写字符开头。你在 JDK 中见过这样的类吗?通过示例学习。

所以“panelCoordenadas”应该是PanelCoordenadas

updateUI();

那是不需要的。当 LAF 更改时,Swing 在内部使用该方法。您无需在应用程序代码中调用它。

JLabel coordX = new JLabel("coordX");
JLabel coordY = new JLabel("coordY");
add(coordX);
add(coordY);    

在类的构造函数中,您创建组件并将组件添加到面板中。那很好。现在您的面板可以显示组件了。

在你的 MouseListener 中你有:

        panelCoordenadas pC = new panelCoordenadas();
        pC.mostrarCoordenadas(x1,y1);                

因此,您创建了一个面板,但对该面板不执行任何操作。该面板只是留在内存中。您不将其添加到框架中。这种做法是错误的。

不要继续创建 PanelCoordenadas 类的新实例。

您可以在创建其他组件的主类中创建一个 PanelCoodenadas 类的实例并将其添加到框架中。如果要更新该实例的文本字段,则需要将该变量作为参数传递给定义 MouseListener 的类。

关于java - 如何在几个 JTextField 中显示鼠标的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61397075/

相关文章:

java - 任务需要哪种结构?

Java Webservice 向 .net 客户端返回空对象

java - 如何在 Java 中获得正确的 JTextField IP 地址?

java - 设置 swing JSlider 和 JTextField 的勾选行为

java - 在 Java 中填充多个 JTextfield 的一个 SQL 查询

java - 带私有(private)类参数的方法的 JMockit MockUp

java - 通过 libGDX 中的控制杆(触摸板)旋转播放器

java - boolean 值无法正确更新,除非您打印它

java - JTextField super.paintComponent() 在 Linux 上忽略背景颜色

java - 概括几个文本字段,以便在获得焦点时选择整个文本