所以我想要做的是從另一個類編輯我的JLabel的文本。我用label.setText(「bla bla」);但它不會影響我的JLabel。編輯另一個類的JLabel文本
我在GUI類代碼lookes是這樣的:
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中沒有出現更多更改,因此將其定義爲static對我沒有幫助。我希望有人知道這段代碼有什麼問題。不要介意是否存在明顯的錯誤,因爲我只採用非常長的代碼中最重要的部分。
在此先感謝。
這裏是我的everythingOK代碼:
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中」 - 可能是因爲「everything」是「OK」,並且Jlabel中每次都出現相同的文本? – 2012-03-29 20:13:44
你確定'everythingOK()'在每兩次調用之間改變嗎? – GETah 2012-03-29 20:18:43
好吧,現在我更新了我的帖子,代碼爲everythingOK() – 2012-03-29 20:22:36