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