【发布时间】:2012-03-29 20:02:30
【问题描述】:
所以我想做的是从另一个类编辑我的 JLabel 的文本。我用 label.setText("bla bla");但它不会影响我的 JLabel。
我在 GUI 类中的代码如下所示:
public class GUI {
JFrame f1 = new JFrame("GUI");
JLabel l1 = new JLabel("Output");
JTextField tf1 = new JTextField("");
public run(){ // main calls this method.
Listener listener = new Listener();
f1.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
f1.setBounds(450, 170, 400, 400);
f1.setVisible(true);
f1.setResizable(false);
f1.setLayout(null);
l1.setBounds(8, 8, 200, 30);
listener.listen(tf1);
f1.add(l1);
}
}
然后我有这个监听器类,它应该根据用户输入对 JLabel 进行更改。代码如下:
public class Listener {
GUI gui = new GUI();
public void listen(final JTextField textfield) {
textfield.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
test();
}
public void removeUpdate(DocumentEvent e) {
test();
}
public void insertUpdate(DocumentEvent e) {
test();
}
public void test() {
if (gui.everythingOK()) { // everythingOK is just a boolean that test if input is valid number and returns true if it is.
gui.l1.setText("No errors."); // this code is supposed to change JLabels text.
} else {
gui.l1.setText("Error."); // this code is supposed to change JLabels text.
}
}
});
}
}
方法 EverythingOK 完美运行,你只需要相信我。如果我将 JLabel 定义为静态,它会起作用,但它只在第一次起作用。第一次更改后,JLabel 中不再出现更改,因此将其定义为静态对我没有帮助。我希望有人知道这段代码有什么问题。并且不介意是否有明显的错误,因为我只取了非常长的代码中最重要的部分。
提前致谢。
这是我的一切正常代码:
public boolean everythingOK() {
if (hasInt(tf1) && isValid(tf1)) {
return true;
} else {
return false;
}
}
public boolean hasInt(JTextField textfield) {
try {
Integer.parseInt(textfield.getText());
return true;
} catch (NumberFormatException e) {
return false;
}
}
public boolean isValid(JTextField textfield) {
if (hasInt(textfield)) {
if (Integer.parseInt(textfield.getText()) >= minValue && Integer.parseInt(textfield.getText()) <= maxValue) {
return true;
} else {
return false;
}
} else {
return false;
}
}
【问题讨论】:
-
“第一次更改后,JLabel 中不再出现任何更改” - 可能是“一切”都“正常”,因此每次在 Jlabel 中都出现相同的文本?
-
您确定
everythingOK()在每两次通话之间都会发生变化吗? -
好的,现在我用代码更新了我的帖子,一切OK()
标签: java swing class user-interface jlabel