更新JTextField中的文本

时间:2011-06-22 17:34:24

标签: java jtextfield

K,与上一个问题不同,我一直主动尝试多次处理这个问题,而且它仍然没有用。

基本上我正在尝试实现一个JTextField。我已经添加了动作侦听器,并且文本的getter和setter正在工作,但是我输入的文本没有显示在文本字段中。我尝试将文字颜色设置为黑色,但没有帮助。老实说,我不确定问题是什么。

K这是代码。

import acm.program.*;
import java.awt.event.*;
import javax.swing.*;

public class NameSurfer extends Program implements NameSurferConstants {
//Change back to program after this
/* Method: init() */
/**
 * This method has the responsibility for reading in the data base
 * and initializing the interactors at the bottom of the window.
 */
public void init() {
    // You fill this in, along with any helper methods //
    createUI();
    addActionListeners();
}

/* Method: actionPerformed(e) */
/**
 * This class is responsible for detecting when the buttons are
 * clicked, so you will have to define a method to respond to
 * button actions.
 */
public void actionPerformed(ActionEvent e) {
    // You fill this in //
    if(e.getSource() == nameField || e.getSource() == graphName) {
        drawNameGraph(nameField.getText());
    } else if(e.getSource() == clearGraph) {
        clearNameGraph();
    }
}

 /* Method: createUI() */
 /**
  * This method sets up and adds the interactors at the bottom of the window*/
private void createUI() {
    nameField = new JTextField(25); 
    nameField.setColumns(25);
    nameField.addActionListener(this);
    graphName = new JButton("Graph");
    clearGraph = new JButton("Clear");
    graph=new NameSurferGraph();
    add(new JLabel("Name"), SOUTH);
    add(nameField, SOUTH);
    add(graphName, SOUTH);
    add(clearGraph, SOUTH);
    add(graph);
    //println(db.fileEntries.size());
}

/* Method: drawNameGraph(str) */
/** Draws the graph of the name entered in nameField
 * */
private void drawNameGraph(String str) {
    //println(str);


    NameSurferEntry entered = db.findEntry(str);
    if(entered != null) {
        //println("Graph: " + entered.toString());
        graph.addEntry(entered);
        nameField.setText("str");

    } else {
        graph.badEntry(str);
    }
    //nameField.setText("");
}

/* Method: clearNameGraph() */
private void clearNameGraph() {
    graph.clear();
}

private NameSurferDataBase db = new NameSurferDataBase(NAMES_DATA_FILE);

/**TextField where the names get entered*/
private JTextField nameField;

/**button to graph name popularity*/
private JButton graphName;

/**Clears graph*/
private JButton clearGraph;

private NameSurferGraph graph;

}

此外,我将尝试使用图像更好地解释我的问题。很抱歉,如果这不适用于您的操作系统。他们的.tiffs,但我会尝试稍后通过图像转换运行它们。出于某种原因,stackoverflow不允许我发布有问题的图像,所以我将尝试通过其他网站进行一些链接。很抱歉给您带来不便。

当我运行代码时,会显示此信息。  See the image for that here. 基本上到目前为止,它按预期工作。

问题出现了 here。 getter和setter正在工作,但我想在用户输入文本时更新JTextField,而不是显示我输入的任何内容。

4 个答案:

答案 0 :(得分:2)

您是否正在尝试this?!?

JTextField text = new JTextField();

text.setText("ttttttttttttexxxt");

答案 1 :(得分:1)

引用the Java 6 API on JTextField

  

public JTextField()

     

构造一个新的TextField。创建默认模型,初始字符串为null列数设置为0.

(强调补充。)

如果您使用的是默认构造函数,那么如果您没有调用setColumns(int),则您的JTextField的列限制为0(无论文本字段的宽度如何),因此将拒绝来自用户的所有输入。我推断您在程序运行时无法以用户身份输入文本,而不是在程序中设置文本并导致其显示时出现问题?

使用具有列限制的构造函数的形式,或使用setColumns在构造后指定非零的最大值。

如果这不能解决问题,请提供代码示例,尤其是在构建和初始化JTextField的位置。

答案 2 :(得分:0)

文本总是默认为黑色,因此除了setText之外不需要播放任何内容。

你可以在这里问一些事情。

要在加载时设置文本,只需使用代码顶部的setText。

public TestFrame() {
    initComponents();
    jTextField1.setText("Hello I am text in a box");
}

您还可以通过以下方式响应事件。示例是按钮单击。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//Text Box changes from default
   jTextField1.setText("The button was pushed!!");        
}

请注意,它完全相同,我觉得你让它变得比它实际上复杂一点。

答案 3 :(得分:0)

使用普通的TextField而不是JTextfield。根据问题this post。我不是专家,但我遇到了完全相同的问题,它似乎与ACM库的使用有关。