简体   繁体   English

JTextField 文本不会打印

[英]JTextField text won't print

as you see I have made a very simple program where I input text on a textfield, then press the button to print it on the console:如您所见,我制作了一个非常简单的程序,我在文本字段中输入文本,然后按下按钮将其打印在控制台上:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Main {

  private static class Window extends JFrame {
    private static class TextField extends JTextField {
      private TextField() {
        setVisible(true);
        setBounds(5, 0, 190,20);
      }
    }
    public class Button extends JButton implements ActionListener {
      private Button() {
        setText("print");
        addActionListener(this);
        setVisible(true);
        setBounds(5, 35, 190,20);

      }
      public void actionPerformed(ActionEvent e) {
        TextField textField = new TextField();
        String input = textField.getText();
        System.out.println(input);
      }

    }

However, while I click the button, it adds blank lines to the console, without the text I have written in it.但是,当我单击该按钮时,它会向控制台添加空白行,而没有我在其中写入的文本。

Your actionPerformed method creates a new TextField instance and prints the text from that new instance.您的actionPerformed方法创建一个新的 TextField 实例并打印来自该新实例的文本。

A very simple example that works as intended:一个按预期工作的非常简单的示例:

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TextAndButtonExample {
  public static void main( String[] args ) {
    EventQueue.invokeLater(() -> new TextAndButtonExample().start());
  }

  void start() {
    JTextField textField = new JTextField();

    JButton button = new JButton(new AbstractAction("Print") {
      public void actionPerformed( ActionEvent e ) {
        System.out.println(textField.getText());
      }
    });

    JPanel controlPane = new JPanel(new GridLayout(2, 1));
    controlPane.add(textField);
    controlPane.add(button);

    JPanel contentPane = new JPanel();
    contentPane.add(controlPane);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(contentPane);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}

Note that I did not extend any Swing components and that I did use a layout manager instead of explicitly setting bounds for components.请注意,我没有扩展任何 Swing 组件,并且我确实使用了布局管理器而不是为组件显式设置边界。

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

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