在我的Java Swing应用程序中,我有多个用于日期的JTextField,单击时会有一个JButton,它会打开日历来选择日期,并且日期字符串应该插入其中一个JTextField,所以我想设计程序,让用户先点击一个日期JTextField,他想输入一个日期[关注该字段并记住它],程序将JTextField保存为目标组件,然后将该组件传递给calendar对象以输入拾取的日期。到目前为止,我可以对程序进行硬编码,这样它就可以将我选择的任何日期字符串输入到我硬编码过的某个JTextField,但问题是如何记住用户点击的JTextField?所以我不需要硬编码。
我试过:Date_Field.get文档()。addDocumentListener(A_Listener);直到用户开始输入它,它才会得到焦点。
我也试过:
Date_Field.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Focused_Date_TextField=(JTextField)evt.getSource();
}
});
也不起作用,因为当用户点击它时,在用户开始输入之前,还没有任何动作[因此没有焦点]。
那么,当用户只需单击JTextField而不键入任何内容时,有什么方法可以获取它呢?
谢谢你的回答和建议,但它们不是我想要找到的。太麻烦了,我的应用程序中没有足够的空间为每个字段添加一个按钮,即使我有足够的空间,他们看起来太忙了,几十个字段都有自己的按钮,我想清理简单的外观,但仍然以我喜欢的方式运行,所以我做了一些搜索,找到了理想的答案,下面是如何实现它:
Date_TextField[Index].addFocusListener(new FocusListener()
{
public void focusGained(FocusEvent e)
{
Out("Focus gained : "+e.toString());
Focused_Date_TextField=(JTextField)e.getSource();
}
public void focusLost(FocusEvent e)
{
Out("Focus lost : "+e.toString());
}
});
然后,我将焦点_Date_TextField传递给日历,这样在选择日期时,日期文本将被输入到用户选择的JTextField中。
程序员的建议是解决问题的方法。这是您将在其他应用程序中看到的常见UI。
如何在Java中找到JTextField焦点?
不过,在处理文本组件时,要回答上述更一般的问题,可以创建一个扩展自TextAction
的Action
。TextAction
有一个getFocusedComponent()
方法,它返回最后一个带焦点的文本组件。
例如:
public class SelectAll extends TextAction
{
public SelectAll()
{
super("Select All");
}
public void actionPerformed(ActionEvent e)
{
JTextComponent component = getFocusedComponent();
component.selectAll();
component.requestFocusInWindow();
}
}
因此,通常您会使用此类创建JMenuItem
,然后将菜单项添加到JMenuBar
上的JMenu
。这实际上是JDK的剪切/复制/粘贴操作的工作方式。
同样,我不建议将其作为解决此问题的解决方案,但建议用于将来在多个文本组件之间共享操作时出现的问题。
此外,当您使用这种方法时,getFocus usedComponent()
方法将返回任何文本组件,因此不能保证最后一个具有焦点的组件将是您的日期字段之一。不使用这种方法的另一个原因。
将JTextField
和JButton
合并成一个自定义组件(可能是一个JPanel
),并隔离其中的功能。这样,按钮总是与给定的JTextField
相关联,并且您不关心哪个字段最后被“聚焦”
public class DateField extends JPanel {
private JTextField field;
private JButton btn;
public DateField() {
setLayout(new FlowLayout(FlowLayout.LEFT));
field = new JTextField(11);
btn = new JButton("...");
add(field);
add(btn);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Show calendar, get date do all that funky stuff
field.setText(dateAsString);
}
});
}
}
然后,您可以创建任意数量的容器,并将它们添加到您想要的任何容器中
问题内容: 我让我的游戏在没有鼠标的情况下运行,因此不能使用指针。当玩家输球时将显示高分菜单。 这是我的代码 我努力了 但仍然没有专注于我的。 如何聚焦呢? 问题答案: 如果希望在GUI显示时集中精力,可以使用以下方法: 哪里会是你和你的。
当我的应用程序加载时,它是使用netbean制作的,第一个JTextField会自动聚焦,在这个JTextField中,我写了“输入您的用户名”,当用户点击这个字段时它会消失,但是当应用程序加载时,这个字段是聚焦的,意味着我看不到“输入您的用户名”,如何在启动时取消聚焦?
问题内容: 我想将焦点放在作为对象消息传递给JOptionPane的特定JTextField上。这是我的代码(我希望焦点在txt2上,但焦点始终在txt1上): 问题答案: 一旦覆盖,您可以让组件请求焦点。像这样: 这是程序的完整功能/经过测试的版本:
问题内容: 我们如何从文本字段中检索值?我需要将值转换为进一步处理。我已经在单击按钮时创建了一个文本字段,我需要存储输入到中的值,你能提供一个代码段吗? 问题答案: 参见Java文档中的JTextField 示例代码可以是:
所以,我完成了一个数独解算器,但我想改进它。要做到这一点,我需要从中找到我的。我正在使用实时读取我的,问题是在中。 我需要到达发生的。例如,如果输入无效,将变红等。 如果您需要知道,我将所有放在矩阵中。每个字段都处理数独中的一个数字。 (扩展)
问题内容: 我试图在单个行上具有多个JTextField,但是我不希望它们具有相同的宽度。如何控制宽度并使其中一些比其他更宽?我希望它们一起占总宽度的100%,所以如果我可以使用某种重量的东西,那将是很好的。 我试过了,但是没有道理。 这是一个示例,其中我使用了三行和三个字符串,这些字符串应按列显示: 问题答案: 所有Swing组件均具有首选大小。文本组件的首选大小基于组件的文本。因此,一般情况下