Обновление текста в JTextField - PullRequest
0 голосов
/ 22 июня 2011

K, поэтому, в отличие от моего последнего вопроса, я много раз пытался решить эту проблему, и она все еще не работает.

В основном я пытаюсь реализовать JTextField. Я добавил к нему прослушиватель действий, и методы получения и установки текста работают, но вводимый мной текст не отображается в текстовом поле. Я попытался установить цвет текста на черный, и это не помогло. Честно говоря, я не уверен, в чем проблема.

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 не позволяет мне публиковать изображения, о которых идет речь, поэтому я попытаюсь вместо этого сделать несколько ссылок на них через другой сайт. Приносим извинения за неудобства.

Когда я запускаю код, это отображается. Смотрите изображение здесь. В основном пока все работает как положено.

Проблема возникает здесь . Геттеры и сеттеры работают, но я бы хотел, чтобы JTextField обновлялся, когда пользователь вводит текст, а не отображал в нем ничего, что я в него ввел.

Ответы [ 4 ]

2 голосов
/ 22 июня 2011

Вы пытаетесь сделать это ?!?

JTextField text = new JTextField();

text.setText("ttttttttttttexxxt");
1 голос
/ 22 июня 2011

Цитирование из API Java 6 на JTextField :

public JTextField()

Создает новый TextField.Модель по умолчанию создана, начальная строка - null, а число столбцов установлено на 0.

(выделение добавлено).

Если вы используете конструктор по умолчанию, то, если вы не вызвали setColumns(int), ваш JTextField имеет предел столбца 0 (независимо от ширины текстового поля) и, следовательно, будет отклонять любой ввод от пользователя.Я предполагаю, что у вас возникают проблемы при вводе текста в качестве пользователя во время работы программы, а не при настройке текста в программе и его отображении?

Либо используйте форму конструктора, в которой есть столбецlimit или используйте setColumns для указания ненулевого максимума после построения.

Если это не решит проблему, предоставьте пример кода, особенно там, где вы создаете и инициализируете свой JTextField.

0 голосов
/ 04 февраля 2013

Используйте обычный TextField вместо поля JText. Согласно этому посту это была проблема. Я не специалист, но я столкнулся с точно такой же проблемой, и это, похоже, связано с использованием библиотеки ACM.

0 голосов
/ 22 июня 2011

Текст по умолчанию всегда черный, поэтому нет необходимости играть ни с чем, кроме 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!!");        
}

Обратите внимание, что это все то же самое, я чувствую, что вы делаете это немного сложнее, чем на самом деле.

...