如何从 JTextField 中检索文本?

Posted

技术标签:

【中文标题】如何从 JTextField 中检索文本?【英文标题】:how do I retrive a text, from a JTextField? 【发布时间】:2022-01-13 19:35:06 【问题描述】:

这是代码。它创建了一个 GUI。

如果我按下按钮,我需要制作一个可以工作的功能

package View;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.WindowListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import modulo.Test;

public class InterfacciaGrafica extends JFrame  implements ActionListener 

    private static final long serialVersionUID = 1L;

    public InterfacciaGrafica(String ArrayClienti[])
        this.setTitle("BiKar Prenotazioni");
        this.setSize( 300,200);
        this.setBackground(Color.black);
        this.setForeground(Color.black);
        this.setLayout(new BorderLayout());
        
          
        PannelloIscrizione PannelloIscrizione = new PannelloIscrizione(ArrayClienti);
        this.add(PannelloIscrizione,BorderLayout.CENTER);
        PannelloIscrizione.setVisible(true);
        
    

    @Override
    public void actionPerformed(ActionEvent e) 
        // TODO Auto-generated method stub

    
    

package View;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import modulo.PatenteTypes;
public class PannelloIscrizione extends JPanel  implements ActionListener
    
    private static final AbstractButton ID = null;
    Color Arancione = new Color(255, 175, 0);
    int eta;
    String nome;
    String cognome;
    String id;
    String tipoPatente;
    String tipoCliente;
    
    public PannelloIscrizione(String ArrayClienti[]) 
        this.setLayout(new BorderLayout());
        this.setBackground(Color.black);
        this.setForeground(Color.orange);
        
        Container ContainerCentro = new Container();
        ContainerCentro.setSize(200, 100);
        
        JComboBox TipoCliente = new JComboBox(ArrayClienti);
        JTextField Nome = new JTextField(20);
        JTextField Cognome = new JTextField(20);
        JTextArea ID = new JTextArea(id);
        JTextField Eta = new JTextField(2);
        JComboBox<PatenteTypes> TipoPatente= new JComboBox<PatenteTypes>(PatenteTypes.values());
        JButton Iscrizione = new JButton("Iscriviti");
        
        ContainerCentro.setLayout(new BorderLayout());  
        this.add(ContainerCentro, BorderLayout.CENTER);
        
        ContainerCentro.setBackground(Color.black);
        ContainerCentro.setForeground(Color.black);
        
        ContainerCentro.add(ID,BorderLayout.WEST);
        ContainerCentro.add(Eta, BorderLayout.EAST);
        ContainerCentro.add(TipoPatente,BorderLayout.CENTER);

        ID.setBackground(Arancione);
        ID.setForeground(Color.black);
        Eta.setBackground(Arancione);
        Eta.setForeground(Color.black);
        TipoPatente.setBackground(Arancione);
        TipoPatente.setForeground(Color.black);
        
        Container ContainerNord = new Container();
        ContainerNord.setLayout(new BorderLayout());
        this.add(ContainerNord, BorderLayout.NORTH);
        ContainerNord.setSize(200, 100);
        ContainerNord.add(TipoCliente,BorderLayout.WEST);
        ContainerNord.add(Nome, BorderLayout.CENTER);
        ContainerNord.add(Cognome, BorderLayout.EAST);
        
        ContainerNord.setBackground(Color.black);
        ContainerNord.setForeground(Color.black);
        TipoCliente.setBackground(Arancione);
        TipoCliente.setForeground(Color.black);
        Nome.setBackground(Arancione);
        Nome.setForeground(Color.black);
        Cognome.setBackground(Arancione);
        Cognome.setForeground(Color.black);

        Container ContainerSud = new Container();
        ContainerSud.setLayout(new BorderLayout());
        this.add(ContainerSud, BorderLayout.SOUTH);
        ContainerSud.setBackground(Color.black);
        ContainerSud.setForeground(Color.black);
        ContainerSud.add(Iscrizione, BorderLayout.CENTER);
        Iscrizione.setBackground(Arancione);
        Iscrizione.setForeground(Color.black);
        
        
    
        
    
        ContainerCentro.setVisible(true);
        ContainerNord.setVisible(true);
        ContainerSud.setVisible(true);
        TipoCliente.setVisible(true);
        ID.setVisible(true);
        Eta.setVisible(true);
        TipoPatente.setVisible(true);
        Nome.setVisible(false);
        Cognome.setVisible(false);
        Iscrizione.setVisible(true);
        
    
        Iscrizione.addActionListener(this);
       

    

    public int getEta() 
        return eta;
    
    public void setEta(int eta) 
        this.eta = eta;
    
    public String getNome() 
        return nome;
    
    public void setNome(String nome) 
        this.nome = nome;
    
    public String getCognome() 
        return cognome;
    
    public void setCognome(String cognome) 
        this.cognome = cognome;
    
    public String getId() 
        return id;
    
    public void setId(String id) 
        this.id = id;
    
    public String getTipoPatente() 
        return tipoPatente;
    
    public void setTipoPatente(String tipoPatente) 
        this.tipoPatente = tipoPatente;
    
    public String getTipoCliente() 
        return tipoCliente;
    
    public void setTipoCliente(String tipoCliente) 
        this.tipoCliente = tipoCliente;
    
    @Override
    public void actionPerformed(ActionEvent e) 
        if(e.getSource().equals(Iscrizione)) 
            
            setId(ID.getText());
            System.out.println(ID.getText());
        
    


我想从我的 GUI 在 JTextField 中写入一些文本,然后单击按钮后,我希望文本成为我的类的属性 id 的值。但 getText 不起作用

第一个类声明我的框架,里面有一个面板,包含一些文本字段。

【问题讨论】:

由于你没有提供一个 minimal reproducible example 来证明你的问题(或者甚至是一个可以实际编译的代码 sn-p),我不得不猜测 ID 是在本地声明的构造函数的上下文,使其无法被actionPerformed 方法访问。如果是这样的话,ID 应该改为实例字段 是的,.getText() 是您从 JTextField 中提取文本的方式。它不起作用表明您的代码中某处存在错误,可能在此代码中:“我省略了代码中所有不太相关的部分,但如有必要我会添加它们。”我>。我建议您显示更多代码,特别是 minimal reproducible example - 请阅读链接以了解确切这是什么以及为什么它可以帮助您和我们。 顺便说一句,你会想学习和使用Java naming conventions。变量名应全部以小写字母开头,而类名应以大写字母开头。学习这一点并遵循这一点将使我们能够更好地理解您的代码,并让您更好地理解其他人的代码。 (1-) 1) 在您的最后一个问题中,还建议变量名称不应以大写字符开头。我见过的每一本教科书或教程都使用了这些约定。我们不应该重复建议。我们的时间可以更好地用于帮助他人。 2)在这个例子中,你使用的是“setSize()”。昨天给你的教程链接包含很多例子。他们都没有使用那个方法。这是布局管理器的工作。通过例子学习,否则你会继续有基本的问题。 【参考方案1】:
    if(e.getSource().equals("Iscrizione")) 
        //setId(ID.getText());
    

这总是错误的。 e.getSource() 返回一个 Component 并且 Component.equals(String) 将始终为 false;

【讨论】:

以上是关于如何从 JTextField 中检索文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 JTextField 数组并从 String 数组中检索文本?

从文本文件读取到 JTextfield

如何从 JTextField 获取字符串并将其保存在变量中的更新?

如何在 JTextField 中对齐文本?

按下按钮将文本从 JTextfield 复制到剪贴板

如何在 JTextField 中显示淡灰色的“重影文本”?