【问题标题】:How to show the coordinates of my mouse in a couple JTextField?如何在一对 JTextField 中显示我的鼠标坐标?
【发布时间】:2020-08-07 08:38:10
【问题描述】:

我是新来的,我是开发的初学者。我的问题是我在JPanel 内有几个JTextField 控件,这也在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);
        }
    });        
} 

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

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 以了解它是否获取数据。数据按屏幕显示,但不按文本字段显示。

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

【问题讨论】:

  • 您创建了一个新面板,但没有将其添加到任何内容中。您可能希望在创建框架时创建面板,然后在显示框架之前将其添加到框架中。当鼠标移动时,在现有面板上调用mostrarCoordenadas

标签: java swing jtextfield mouselistener mousemotionlistener


【解决方案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 的类。

【讨论】:

  • 谢谢 camickr 和 Andrew....它有效!!!...谢谢您所做的一切
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多