我是新来的GUI的东西,并遇到以下问题的麻烦。我有3个JTextFields,信用卡号码,到期日期和安全号码。我能够将信息输入到字段中。我还为每个按钮实现了焦点侦听器。如果我点击它,它说获得了焦点,如果我点击其他任何地方,它会失去焦点。在这些文本字段下,我有一个数字键盘(触摸屏/鼠标点击)来输入数字。如何才能专注于特定的文本字段,直到只有其他两个文本字段中的一个被点击?一旦我尝试点击输入数字,当前拥有焦点的文本字段将失去焦点。我不希望发生这种情况。我在网上搜索,无法找到特定于我的案例的东西。任何帮助或提示,将不胜感激。如何在单击输入数字按钮时专注于JTextField?
回答
除了@Hovercrafts建议(+1)之外,您可能还想将TextAction
扩展为将数字插入文本字段的逻辑。该TextAction
,您可以访问到具有焦点的最后一个文本字段,以便插入代码变得非常通用:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;
public class NumpadPanel extends JPanel
{
public NumpadPanel()
{
setLayout(new BorderLayout());
JTextField textField1 = new JTextField(4);
JTextField textField2 = new JTextField(2);
JTextField textField3 = new JTextField(2);
JPanel panel = new JPanel();
panel.add(textField1);
panel.add(textField2);
panel.add(textField3);
add(panel, BorderLayout.PAGE_START);
Action numberAction = new TextAction("")
{
@Override
public void actionPerformed(ActionEvent e)
{
JTextComponent textComponent = getFocusedComponent();
if (textComponent != null)
textComponent.replaceSelection(e.getActionCommand());
}
};
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(0, 5));
add(buttonPanel, BorderLayout.CENTER);
for (int i = 0; i < 10; i++)
{
String text = String.valueOf(i);
JButton button = new JButton(text);
button.addActionListener(numberAction);
button.setMargin(new Insets(20, 20, 20, 20));
button.setFocusable(false);
buttonPanel.add(button);
}
// Optionally auto tab when text field is full
//SizeDocumentFilter sf = new SizeDocumentFilter();
//sf.installFilter(textField1, textField2, textField3);
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("Numpad Panel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new NumpadPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
您可能还需要考虑使用Text Field Auto Tab所以焦点从文本字段中移动的文本字段变成文本字段充分。
谢谢您的回复,但我无法扩展TextAction类,因为我已经扩展了一个不同的类。有太多的代码要处理我。但我最终得到它与Hovercrafts的答案。 – Kumar
@哈罗德,是的,气垫船的答案解决你的问题。 TextAction提供更好的设计。 “我已经扩展了不同的课程,什么课程?我没有理由像我演示的那样创建一个简单的类。该课程独立于您可能已创建的任何课程。 – camickr
我想时间才是原因。我们正在设计一个POS系统,我负责SQL /数据库的东西。 GUI团队有太多的工作要处理,所以我决定尝试和帮助。我迷路了,不知道从哪里开始。这是一个很好的学习经历。我们的项目已经完成,但我会尝试修改代码以扩展TextAction。 – Kumar
- 1. 专注于单击按钮
- 2. 专注于单选按钮
- 3. 专注于输入字段
- 4. 如何在输入文字框时专注于TextBox?
- 5. 按钮如何专注于点击在Android
- 6. 提交/转到专注于输入并按下输入时
- 7. 如何使editText专注于Android中的按钮点击?
- 8. 色带控制专注于按钮单击
- 9. 触发与jQuery单击按钮时输入按钮点击
- 10. 禁用输入标签并专注于提交按钮
- 11. Javascript专注于文件输入的浏览按钮
- 12. 基于输入和单击单选按钮的实时计算
- 13. 如何在silverlight中单击按钮时验证输入?
- 14. 如何在点击按钮时复制输入字段angular2
- 15. 如何基于点击单选按钮重置输入
- 16. 在按钮上单击幻灯片并专注于jquery mobile中的搜索输入
- 17. 单击按钮时使用Javascript在输入中发送击键
- 18. 如何在输入其他jtextfield时从数据库设置jtextfield?
- 19. 单击按钮时,如何更改此输入值?
- 20. 如何删除单击按钮时的文本输入
- 21. 单击保存按钮时如何验证多个输入
- 22. 如何在电话页面加载时专注于输入字段?
- 23. 单击按钮时插入数据库
- 24. 如何在单击按钮时在文本输入中保留插入点
- 25. 如何在Rails中单击按钮时写入数据库?
- 26. 单击按钮时更改输入字段的值
- 27. 单击按钮时添加输入字段
- 28. 设置输入字段专注于开始输入
- 29. 专注于工具条按钮vb.net
- 30. VoiceOver不专注于后退按钮
'这是为什么发生?' - 我为您提供了工作代码。你的代码有什么不同?发布证明问题的[SSCCE](http://sscce.org/)。 – camickr