首次发布为SO通常具有我需要的功能,但无法在任何地方找到它。
独立处理斯坦福大学的CS106A,我在显示器上添加了一个文本框。
文本框 VISUALLY 不显示任何更新。如果.setText(“some text”),它要么保持空白,要么保留文本。用来。但是踢球者是文本框做了它应该做的其他事情,它看起来不像它。
为了澄清一些困惑,我的问题是之前我点击图表按钮或使用回车键。我可以在空白处输入任何我想要的东西,但我看不到它。我可以完全或部分删除任何预设文本并输入新文本,我看不到任何内容已被删除或输入。
一旦激活e.getActionCommand()系统,就会打印出所输入或删除的内容,该部分完美无缺。
会发生什么:
- 文本框接受输入(但不显示新文本,也不更改任何现有文本)
- e.getActionCommand()工作并返回输入的文本
- e.getSource()工作并返回输入的文本
例如:
在文本框中键入“测试”
文本框直观地继续显示“输入名称”
name.getText()返回“testing”
import acm.program.*;
import java.awt.Font;
import java.awt.event.*;
import javax.swing.*;
public class NameSurfer extends ConsoleProgram implements NameSurferConstants {
private static final int BUTTON_FONT_SIZE = 24;
private static final String BUTTON_FONT = "Serif";
public void init() {
setSearchBar();
}
private void setSearchBar() {
/* This method sets up the bottom search bar and interactors */
JLabel nameText = new JLabel("Name: ");
nameText.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE));
add(nameText,SOUTH);
name = new JTextField(10);
name.addActionListener(this);
name.setActionCommand("Graph");
name.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE));
name.setText("Enter a name");
add(name,SOUTH);
graph = new JButton("Graph");
graph.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE));
add(graph, SOUTH);
clear = new JButton("Clear");
clear.setFont(new Font(BUTTON_FONT, Font.PLAIN, BUTTON_FONT_SIZE));
add(clear, SOUTH);
addActionListeners();
}
public void actionPerformed(ActionEvent e) {
if( e.getSource() == clear){
println("Testing clear");
}else if(e.getActionCommand() == "Graph"){
println(name.getText());
name.setText("Enter a name");
}
}
private JButton clear;
private JButton graph;
private JTextField name;
}
答案 0 :(得分:1)
我认为你的问题在这里:
else if(e.getActionCommand() == "Graph"){
println(name.getText());
name.setText("Enter a name");
}
此行name.setText("Enter a name");
在触发ActionEvent时将文字设置为"Enter a name"
,因为setActionCommand
始终等于Graph
(假设您已应用修正@气垫船全的鳗鱼)。
name.getText()
正确的原因是因为它在您在动作侦听器中调用name.setText("
之前返回该值,但随后立即将其更改回"Enter a name"
name.setText("Enter a name");
因此,要解决此问题,请注释掉或删除该行并再次测试您的代码:
else if(e.getActionCommand() == "Graph"){
println(name.getText());
//name.setText("Enter a name");
}
然后你需要考虑一下你真正想要如何重置文本字段,以及何时应该重置它。