我在更改另一个对象的构造函数中初始化的变量时遇到问题
的JFrame:
public class Window extends JFrame {
private String ip = "default";
private String port = "default";
private String nameClient = "default";
// getters and setters, including setPort ...
public void setPort(String port) {
this.port = port;
}
public Window() {
JLabel numPort = new JLabel(port);
numPort.setBounds(149, 77, 46, 14);
add(numPort);
}
}
在测试课程中:
public class TestWindow {
public static void main(String[] args){
String validate = "1234";
Window tester = new Window();
tester.setPort(validate);
}
}
对于noob问题感到抱歉,但我不明白为什么Jlabel在这里没有变化。如果需要,我可以发布整个代码(尝试制作类似聊天的摇摆应用程序)
由于
答案 0 :(得分:0)
在构造函数中,您将值设置为Label。此值基于当前端口值。 在您的测试类中,您使用默认端口值创建新的Window实例,然后才更改端口值(但它显然不会影响已创建的Label)。
您应该将port参数添加到构造函数中,如下所示:
public Window(String port) {
JLabel numPort = new JLabel(port);
numPort.setBounds(149, 77, 46, 14);
add(numPort);
}
或更新你的setPort()方法:
public void setPort(String port) {
this.port = port;
numPort.setText(port);
}
答案 1 :(得分:0)
您正在更新Window类中的值,但不更新JLabel中的值。 Java字符串是不可变的,因此您的重新分配实际上会导致Windows类上的变量指向String的新实例,而不是更改String的值。
尝试在Window类代码中使用类似的东西:
public class Window extends JFrame {
private String ip = "default";
private String port = "default";
private String nameClient = "default";
private JLabel numPort; //converted to a instance variable
// getters and setters, including setPort ...
public void setPort(String port) {
this.port = port;
numPort.setText(port);
}
public Window() {
numPort = new JLabel(port);
numPort.setBounds(149, 77, 46, 14);
add(numPort);
}
}
答案 2 :(得分:0)
我必须承认,不建议在构造函数中进行实际工作:
现在,您的窗口标签不会更改的原因是,当您在main中执行以下操作时。
Window tester = new Window();
您的构造函数已被调用,您的JLabel已使用“默认”端口
进行初始化我建议对构造函数进行以下更新,即传递构造的JLabel,这样可以更好地控制输入。
public Window(JLabel label) {
......
}
希望这有帮助。