为什么我的 GUI 中没有打印变量?
Why isn't my variable printing in my GUI?
我目前正在开发一个非常简单的 GUI,因为我是 Java 的新手。我想知道为什么我的变量不会出现在 message
.
中
有效
...
private void createContents() {
JLabel numberPrompt = new JLabel("What's your random number (min will be 1)?");
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
greeting = new JLabel();
add(numberPrompt);
add(numberBox);
add(greeting);
numberBox.addActionListener(new Listener());
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String message;
message = "Glad to meet you, " + numberBox.getText(); + "!";
numberBox.setText("");
greeting.setText(message);
}
...
不起作用
...
private void createContents() {
JLabel numberPrompt = new JLabel("What's your random number (min will be 1)?");
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
greeting = new JLabel();
add(numberPrompt);
add(numberBox);
add(greeting);
numberBox.addActionListener(new Listener());
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String message;
message = "Glad to meet you, " + maxNumberString + "!";
numberBox.setText("");
greeting.setText(message);
}
...
为什么第一个代码适用于 numberBox.getText()
但当我用 maxNumberString
替换它时它不起作用,即使变量的值为 numberBox.getText()
?
完整代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Greeting extends JFrame {
private static final int WIDTH = 400;
private static final int HEIGHT = 150;
private JTextField numberBox;
private JLabel greeting;
private String maxNumberString;
private Integer maxNumber;
private String randomNumbeString;
private Integer randomNumber;
public Greeting() {
setTitle("Random Number Generator");
setSize(WIDTH, HEIGHT);
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
createContents();
setVisible(true);
}
private void createContents() {
JLabel numberPrompt = new JLabel("What's your random number (min will be 1)?");
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
greeting = new JLabel();
add(numberPrompt);
add(numberBox);
add(greeting);
numberBox.addActionListener(new Listener());
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String message;
message = "Glad to meet you, " + maxNumberString + "!";
numberBox.setText("");
greeting.setText(message);
}
}
public static void main(String[] args) {
new Greeting();
}
}
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
执行上述语句时,文本字段为空。如果事实上框架甚至不可见,那么用户就没有机会在文本字段中输入文本。
没有使用文本自动更新变量!
如果想让变量自动更新,那么需要添加每次事件产生时更新变量的逻辑。例如,您可以将 DocumentListener
添加到文本字段的 Document
。每次从文本字段中添加(或删除)文本时都会生成一个事件。然后就可以得到文本域的当前值了。
阅读 How to Write a DocumentListner 上的 Swing 教程部分,了解更多信息和入门示例。
我目前正在开发一个非常简单的 GUI,因为我是 Java 的新手。我想知道为什么我的变量不会出现在 message
.
有效
...
private void createContents() {
JLabel numberPrompt = new JLabel("What's your random number (min will be 1)?");
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
greeting = new JLabel();
add(numberPrompt);
add(numberBox);
add(greeting);
numberBox.addActionListener(new Listener());
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String message;
message = "Glad to meet you, " + numberBox.getText(); + "!";
numberBox.setText("");
greeting.setText(message);
}
...
不起作用
...
private void createContents() {
JLabel numberPrompt = new JLabel("What's your random number (min will be 1)?");
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
greeting = new JLabel();
add(numberPrompt);
add(numberBox);
add(greeting);
numberBox.addActionListener(new Listener());
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String message;
message = "Glad to meet you, " + maxNumberString + "!";
numberBox.setText("");
greeting.setText(message);
}
...
为什么第一个代码适用于 numberBox.getText()
但当我用 maxNumberString
替换它时它不起作用,即使变量的值为 numberBox.getText()
?
完整代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Greeting extends JFrame {
private static final int WIDTH = 400;
private static final int HEIGHT = 150;
private JTextField numberBox;
private JLabel greeting;
private String maxNumberString;
private Integer maxNumber;
private String randomNumbeString;
private Integer randomNumber;
public Greeting() {
setTitle("Random Number Generator");
setSize(WIDTH, HEIGHT);
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
createContents();
setVisible(true);
}
private void createContents() {
JLabel numberPrompt = new JLabel("What's your random number (min will be 1)?");
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
greeting = new JLabel();
add(numberPrompt);
add(numberBox);
add(greeting);
numberBox.addActionListener(new Listener());
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String message;
message = "Glad to meet you, " + maxNumberString + "!";
numberBox.setText("");
greeting.setText(message);
}
}
public static void main(String[] args) {
new Greeting();
}
}
numberBox = new JTextField(15);
maxNumberString = numberBox.getText();
执行上述语句时,文本字段为空。如果事实上框架甚至不可见,那么用户就没有机会在文本字段中输入文本。
没有使用文本自动更新变量!
如果想让变量自动更新,那么需要添加每次事件产生时更新变量的逻辑。例如,您可以将 DocumentListener
添加到文本字段的 Document
。每次从文本字段中添加(或删除)文本时都会生成一个事件。然后就可以得到文本域的当前值了。
阅读 How to Write a DocumentListner 上的 Swing 教程部分,了解更多信息和入门示例。