Java 更改其他类中的变量
当更改在另一个对象的构造函数中初始化的变量时,我会遇到问题 JFrame:Java 更改其他类中的变量,java,swing,Java,Swing,当更改在另一个对象的构造函数中初始化的变量时,我会遇到问题 JFrame: public class Window extends JFrame { private String ip = "default"; private String port = "default"; private String nameClient = "default"; // getters and setters, including setPort ... pu
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在这里没有改变。如果需要,我可以发布整个代码(尝试创建类似swing的聊天应用程序)
感谢您在构造函数中设置要标记的值。此值基于当前端口值。 在测试类中,使用默认端口值创建新的窗口实例,然后才更改端口值(但它显然不会影响已创建的标签) 您应该向构造函数添加端口参数,如下所示:
public Window(String port) {
JLabel numPort = new JLabel(port);
numPort.setBounds(149, 77, 46, 14);
add(numPort);
}
或者更新setPort()方法:
您正在更新Window类中的值,但不在JLabel中。Java字符串是不可变的,因此重新分配实际上会导致Windows类上的变量指向字符串的新实例,而不是更改字符串的值 尝试在窗口类代码中使用类似的内容:
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);
}
}
我必须承认,不建议在施工人员中进行实际工作:
Window tester = new Window();
您的构造函数被调用,您的JLabel已经用“默认”端口初始化
我建议对构造函数进行以下更新,即传递一个构造的JLabel,这将使您能够更好地控制输入
public Window(JLabel label) {
......
}
希望这有帮助。发布方法窗口。setPort()。。。我们需要看看你在那里做什么……我想这是因为
setPort
只更新port
的值,而不更新numPort
。但是,如果你想要一个非猜测的答案,你需要发布你正在询问的代码。我的另一个猜测是,你认为更新port
的值会以某种方式更新numPort
,但它不会(参见)。@azurefrog是的,我在想,因为我的想法是:如果我更改JLabel实例参数,在新实例中设置该值时,它将更改该值。谢谢大家!是的,当我在setport中添加settext时,它起了作用。谢谢
public Window(JLabel label) {
......
}