0

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

问题

我想显示在一对文本字段中获得的画布鼠标的坐标。该画布位于像面板一样的框架内,其中包含几个文本字段。我将把画布的来源放在这里,它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 以了解它是否获取数据。数据按屏幕显示,但不按文本字段显示。

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

4

1 回答 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 的类。

于 2020-04-23T23:12:55.873 回答