基本上我正在尝试实现一个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,而不是显示我输入的任何内容。
答案 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库的使用有关。