当前位置: 首页 > 知识库问答 >
问题:

如何在点击输入数字按钮时关注JTextField?

唐海阳
2023-03-14

我是图形用户界面的新手,在以下问题上有困难。我有3个JTextFields,信用卡号码,有效期和安全号码。我可以将信息输入到字段中。我还为每个按钮实现了焦点侦听器。如果我单击它,它会显示获得焦点,如果我单击其他任何地方,它会失去焦点。在这些文本字段下,我有一个数字键盘(触摸屏/鼠标单击)来输入数字。我如何保持对特定文本字段的焦点,直到仅特定地单击另外两个文本字段中的一个?一旦我尝试单击输入数字,当前具有焦点的文本字段将失去焦点。我不希望这种情况发生。我在网上搜索了一下,但没有找到与我的案子相关的具体信息。任何帮助或提示都将不胜感激。

共有2个答案

云正信
2023-03-14

除了@Hovercrafts suggestion(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();
            }
        });
    }
}

您可能还想考虑使用文本字段自动选项卡,以便随着文本字段变满,焦点从一个文本字段移动到另一个文本字段。

贡念
2023-03-14
myJButton.setFocusable(false);

或者如果在allMyButtons集合中有一组按钮:

for (JButton button: allMyButtons) {
    button.setFocusable(false);
}

就这样。

 类似资料:
  • 如何让我的动作监听器单击按钮并将按钮文本显示到文本区域? 在actionlistener之后初始化,因此当我尝试定义

  • Javascript(jQuery)代码 HTML/EJS代码 我读过的一些不起作用的帖子: 如何在单击按钮时通过动画显示视图? 尝试在单击按钮时显示div

  • 我正在使用javascript(extensions chrome)在程序“Atom”中制作一个机器人,并希望点击按钮“添加到购物车”。我的html是。我猜我在使用值时需要这样做。怎么做?

  • 如何在无限次或动态地单击按钮时添加新的?或者简单地说,如何执行添加更多按钮的功能? 我在Javafx中尝试过,但它只是在列表中添加了两个按钮。 但我必须动态添加,直到用户想要添加/按下上一个按钮

  • 我在一个页面上有几个html控件和一个搜索按钮。当用户在输入控件之外时(即焦点不在输入控件内),如果用户按enter键,我想触发搜索按钮的单击事件。搜索按钮不是按钮,也不在内 目前我正在做这个

  • 我用的是Android Studio2.2,最小sdk的项目是23。 请帮助我做所需的代码。