所以我做了一个测试窗口,里面有一个JTextField。我不知道出了什么问题。下面是主要代码。问题是,无论我做什么,我都无法编辑文本字段,也无法编辑我创建的第二个文本字段。我有一个带有文本字段的示例程序,它也可以工作,但根本不工作。
我不确定是否需要发布它,但我可以在这里获得完整程序的示例罐。我只发布了处理文本字段的区域
编辑:完整的源代码可在此处获得:GITHUB
我移除了一些东西,它成功了,我放弃了\
EDIT2:事实证明,我调用了一个扩展JGroup的类,简单地调用一个新的JGroup而不是扩展它
EDIT3:好的,问题出在关键事件调度器上,我标记为答案的帖子对此进行了深入的解释
public class Main {
private static JPanel mainPanel = new JPanel();
private static JFrame frame;
public static JTextField textField1 = new JTextField();
public static JTextField textField2 = new JTextField();
private static GroupLayout layout = new GroupLayout(mainPanel);
public static void main(String[] Args) throws InterruptedException{
frame = new JFrame("Test Window");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainPanel.setLayout(layout);
layout.setAutoCreateContainerGaps(false);
layout.setAutoCreateGaps(false);
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGap(200).addGroup(layout.createParallelGroup().addComponent(textField1, 25, 25, 25).addComponent(textField2, 25, 25, 25).addGap(350));
hGroup.addGap(300)
.addGroup(layout.createParallelGroup().addComponent(textField1, 200, 200, 200).
addComponent(textField2, 200, 200, 200)).addGap(300);
layout.setVerticalGroup(vGroup);
layout.setHorizontalGroup(hGroup);
frame.add(mainPanel);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
textField1.setText("I am a simple uneditable testbox");
}
}
不要使用线程。sleep()
有时会挂起整个swing应用程序,而不是尝试使用最适合swing应用程序的swing计时器。
阅读更多如何使用摆动计时器
示例代码:
private Timer timer;
...
// wait for 10 milli-seconds
timer = new javax.swing.Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// next call
}
});
timer.setRepeats(true); // you can turn off reputation
timer.start();
你的问题就像我怀疑的KeyEventDispatcher一样。当您将其添加回来并让它返回true
时,JTextField不起作用。根据KeyEventDispatcher API:
如果此方法的实现返回false,则KeyEvent将传递给链中的下一个KeyEventDispatcher,以当前KeyboardFocusManager结束。如果实现返回true,则假定KeyEvent已被调度(尽管不需要这样),当前KeyboardFocusManager不会对KeyEvent采取进一步的操作。
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Main {
private static JPanel mainPanel = new JPanel();
private static JFrame frame;
public static JTextField textField1 = new JTextField(20);
public static JTextField textField2 = new JTextField(20);
public static void main(String[] Args) throws InterruptedException {
frame = new JFrame("Test Window");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
final JCheckBox dispatchKeyEventReturnCheckBox =
new JCheckBox("Dispatch Key Event Return Value", true);
mainPanel.add(textField1);
mainPanel.add(textField2);
mainPanel.add(dispatchKeyEventReturnCheckBox);
frame.add(mainPanel);
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent evt) {
// TODO Fix this!!!
// !! return false;
return dispatchKeyEventReturnCheckBox.isSelected();
}
});
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
textField1.setText("I am a simple uneditable testbox");
}
}
解决方案:1)不要让您的调度KeyEvent(KeyEvent e)
返回true,除非您不希望GUI处理键程。或者2)更好的是,不要使用这个类。相反,请告诉我们您为什么需要它,让我们帮助您找到更好的方法。
1.回答您试图创建并发布MCVE的问题。
下面是关于如何限制字符输入长度的代码 可以通过
我有一个网站,我想运行购物车功能的完整过程。一切顺利,直到我点击付款方式,选择借记卡和。在将数据放入字段时,它不接受。如何将数据放入字段中。以下是测试网站的链接:https://vapesuite.allomate.solutions/#/.下面是将数据输入字段的代码。
问题内容: 我希望用户仅输入字母或空格(如果用户输入其他字符),我想给jOptionPane消息,我已经搜索过,并且尝试了以下代码 但是现在无论我输入什么都会给出错误 现在我更改了代码 现在它仅在用户输入数字时发出消息。我该如何解决 问题答案: 使用一个,这是我制作的一个示例,它将仅接受字母字符和空格:
我希望我的文本字段只接受数字(数字)和一个点,因为这是一个用户可以在其中写入产品价格的字段。我有这个代码,但它不能很好地工作,它只接受数字和删除。 有人能帮我修一下吗?
问题内容: 我已经在netbeans注册中完成了一个示例项目。在jtextfield1中是用户ID,在Jtextfiled7中是国家/地区,两者都必须使用非数字字符或不允许的空格和特殊字符。怎么可能? 问题答案: @Vivek, 我对你问的这个问题有答案。请按照以下说明进行操作。 在Netbeans中,右键单击JTextfield,然后选择键入事件>> key >> key,然后在代码之间输入以下