如何在几个 JTextField 中显示我的鼠标坐标?
How to show the coordinates of my mouse in a couple JTextField?
我是新来的,我是开发方面的初学者。我的问题是我在 JPanel
中有几个 JTextField
控件,而 JPanel
也在 JFrame
中,并且文本字段不显示我通过方法传递的文本,并且我不知道为什么,因为它的来源真的很简单。
问题
我想在一对文本字段中显示 canvas 的鼠标坐标。 canvas 位于像面板一样的框架内,其中包含几个文本字段。我要在这里放一个 canvas 的来源,在 MouseMotionListener
中是 refer.
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);
}
});
}
嗯,现在在其他 class 包含文本字段的面板中。
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 来知道它是否获取了数据。数据按屏幕显示,但不显示文本字段。
如果有人知道问题出在哪里,我很乐意告诉我。
Class 名称不应以小写字符开头。你见过class中的JDK吗?通过实例学习。
所以"panelCoordenadas"应该是PanelCoordenadas
。
updateUI();
不需要。当 LAF 发生变化时,Swing 在内部使用该方法。您无需在应用程序代码中调用它。
JLabel coordX = new JLabel("coordX");
JLabel coordY = new JLabel("coordY");
add(coordX);
add(coordY);
在 class 的构造函数中,您创建组件并将组件添加到面板。那很好。所以现在你的面板可以显示组件了。
在您的 MouseListener 中,您有:
panelCoordenadas pC = new panelCoordenadas();
pC.mostrarCoordenadas(x1,y1);
因此,您创建了一个面板,但没有对该面板进行任何操作。该面板只是坐在内存中。您不会将其添加到框架中。这种做法是错误的。
不要继续创建您的 PanelCoordenadas
class.
的新实例
而不是在创建其他组件的主要 class 中,创建 PanelCoodenadas
class 的实例并将其添加到框架中。如果您想更新该实例的文本字段,则需要将该变量作为参数传递给定义 MouseListener 的 class。
我是新来的,我是开发方面的初学者。我的问题是我在 JPanel
中有几个 JTextField
控件,而 JPanel
也在 JFrame
中,并且文本字段不显示我通过方法传递的文本,并且我不知道为什么,因为它的来源真的很简单。
问题
我想在一对文本字段中显示 canvas 的鼠标坐标。 canvas 位于像面板一样的框架内,其中包含几个文本字段。我要在这里放一个 canvas 的来源,在 MouseMotionListener
中是 refer.
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);
}
});
}
嗯,现在在其他 class 包含文本字段的面板中。
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 来知道它是否获取了数据。数据按屏幕显示,但不显示文本字段。
如果有人知道问题出在哪里,我很乐意告诉我。
Class 名称不应以小写字符开头。你见过class中的JDK吗?通过实例学习。
所以"panelCoordenadas"应该是PanelCoordenadas
。
updateUI();
不需要。当 LAF 发生变化时,Swing 在内部使用该方法。您无需在应用程序代码中调用它。
JLabel coordX = new JLabel("coordX");
JLabel coordY = new JLabel("coordY");
add(coordX);
add(coordY);
在 class 的构造函数中,您创建组件并将组件添加到面板。那很好。所以现在你的面板可以显示组件了。
在您的 MouseListener 中,您有:
panelCoordenadas pC = new panelCoordenadas();
pC.mostrarCoordenadas(x1,y1);
因此,您创建了一个面板,但没有对该面板进行任何操作。该面板只是坐在内存中。您不会将其添加到框架中。这种做法是错误的。
不要继续创建您的 PanelCoordenadas
class.
而不是在创建其他组件的主要 class 中,创建 PanelCoodenadas
class 的实例并将其添加到框架中。如果您想更新该实例的文本字段,则需要将该变量作为参数传递给定义 MouseListener 的 class。