簡體   English   中英

為什么我的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中。 每次從文本字段添加(或刪除)文本時都會生成一個事件。 然后,您可以獲取文本字段的當前值。

閱讀Swing教程中有關如何編寫DocumentListner的部分以獲取更多信息,並提供一個示例來幫助您入門。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM