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

问题描述 投票:0回答:1

我是新来的,对开发是个初学者。我的问题是,我有几个 JTextField 内部控制 JPanel 其内 JFrame 也是,而且文本字段不显示我通过方法传递的文本,我也不知道为什么,因为这个来源真的很简单。

问题

我想显示一个画布的鼠标坐标,我在一对文本字段中得到。该画布在一个像面板一样的框架内,其中包含一对文本字段。我要把画布的源码放在这里,它在一个 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);
        }
    });        
} 

好了,现在在另一个类中,包括文本字段的面板,我放了一个System.out来知道它是否获得数据。

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来知道它是否得到了数据。数据显示在屏幕上,但文本字段没有。

如果有人知道问题出在哪里,我很乐意告诉我。

java swing jtextfield mouselistener mousemotionlistener
1个回答
1
投票

类名不应该以小写字母开头。你在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的类。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.