我是新来的,对开发是个初学者。我的问题是,我有几个 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来知道它是否得到了数据。数据显示在屏幕上,但文本字段没有。
如果有人知道问题出在哪里,我很乐意告诉我。
类名不应该以小写字母开头。你在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的类。