简体   繁体   English

为什么我的GUI中没有变量打印?

[英]Why isn't my variable printing in my GUI?

I am working on a pretty simple GUI at the moment as I am new to Java. 我正在研究一个非常简单的GUI,因为我不熟悉Java。 I was wondering why my variable won't show up in message . 我想知道为什么我的变量不会出现在message

Works 作品

...
  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);
    }
...

Doesn't work 不行

...
  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);
    }
...

Why is it that the first code works with numberBox.getText() but when I replace it with maxNumberString it doesn't work even though the variable has the value of numberBox.getText() ? 为什么第一个代码与numberBox.getText() ,但当我用maxNumberString替换它时,即使变量的值为numberBox.getText()它也不起作用?

Full Code 完整代码

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();

At the time the above statement is executed, the text field is empty. 执行上述语句时,文本字段为空。 If fact the frame isn't even visible so the user has had no chance to enter text into the text field. 事实上,框架甚至不可见,因此用户没有机会在文本字段中输入文本。

There is no automatic updating of the variable with the text! 没有用文本自动更新变量!

If you want the variable to be automatically updated, then you need to add logic to update the variable every time an event is generated. 如果希望自动更新变量,则需要添加逻辑以在每次生成事件时更新变量。 For example you could add a DocumentListener to the Document of the text field. 例如,您可以将DocumentListener添加到文本字段的Document中。 An event is generated every time text is added (or removed) from the text field. 每次从文本字段添加(或删除)文本时都会生成一个事件。 Then you can get the current value of the text field. 然后,您可以获取文本字段的当前值。

Read the section from the Swing tutorial on How to Write a DocumentListner for more information and an example to get you started. 阅读Swing教程中有关如何编写DocumentListner的部分以获取更多信息,并提供一个示例来帮助您入门。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM