【问题标题】:Activate JButton when pressing enter in text field在文本字段中按 enter 时激活 JButton
【发布时间】:2017-09-26 02:37:39
【问题描述】:

花了一周的时间后,我意识到这对我来说并不容易。我正在尝试做的是在按下“Enter”键后激活“计算”JButton。我很确定我应该再次使用 ActionListener 类,但据我所知,这是我所知道的。

package mincoinsgui;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class MinCoinsGui extends JFrame
{

    //init
    private static final int QUARTERS = 25;
    private static final int DIMES = 10;
    private static final int NICKELS = 5;

    //change variables
    private int quarters = 0;
    private int dimes = 0;
    private int nickels = 0;
    private int change = 0;

    //change labels
    private JLabel quartersLabel;
    private JLabel dimesLabel;
    private JLabel nickelsLabel;
    private JLabel penniesLabel;

    //text field
    private JTextField enterCoinsTF = new JTextField(2);

    public MinCoinsGui() //contructor method
    {
        // 1. Create/initialize components
        JButton calculateBtn = new JButton("Calculate");
        calculateBtn.addActionListener(new CalculateBtnListener());

        JButton clearBtn = new JButton("Clear");
        clearBtn.addActionListener(new ClearBtnListener());

        enterCoinsTF.setEditable(true);


        // 2. Create panel panel / set grid layout
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(6, 2, 2, 2));

        // 3. Add components to panel
        quartersLabel = new JLabel("");
        dimesLabel = new JLabel("");
        nickelsLabel = new JLabel("");
        penniesLabel = new JLabel("");

        panel.add(new JLabel("Enter Change (1-99):"));
        panel.add(enterCoinsTF);
        panel.add(new JLabel("Quarters"));
        panel.add(quartersLabel);
        panel.add(new JLabel("Dimes"));
        panel.add(dimesLabel);
        panel.add(new JLabel("Nickels"));
        panel.add(nickelsLabel);
        panel.add(new JLabel("Pennies"));
        panel.add(penniesLabel);
        panel.add(calculateBtn);
        panel.add(clearBtn);

        setContentPane(panel); //set window (JFrame) characteristics

        pack(); //do layout
        setTitle("Minimum Coins");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

    }

    class CalculateBtnListener implements ActionListener //Calculate Button Listener
    {

        public void actionPerformed(ActionEvent e)
        {
            try
            {
                String dyStr = enterCoinsTF.getText();
                change = Integer.parseInt(dyStr);
                while (change >= QUARTERS)
                { //Subtact & Count Quarters
                    change = change - QUARTERS;
                    quarters++;
                } //Subtract & Count Dimes
                while (change >= DIMES)
                {
                    change = change - DIMES;
                    dimes++;
                } //Subtract & Count Nickels
                while (change >= NICKELS)
                {
                    change = change - NICKELS;
                    nickels++;
                }

                //output results in JLabels
                quartersLabel.setText("" + quarters);
                dimesLabel.setText("" + dimes);
                nickelsLabel.setText("" + nickels);
                penniesLabel.setText("" + change);

                quarters = 0;
                nickels = 0;
                dimes = 0;
            } catch (NumberFormatException f) //disable letters from being entered
            {
                enterCoinsTF.setText("Invalid");
                enterCoinsTF.requestFocus();
                enterCoinsTF.selectAll();
            }
        }

    }

    class ClearBtnListener implements ActionListener //ClearBtnListener
    {
        //Clear and set focus to text field
        public void actionPerformed(ActionEvent e)
        {
            enterCoinsTF.setText("");
            enterCoinsTF.requestFocus();
        }
    }

    public static void main(String[] args)//main method
    {
        MinCoinsGui window = new MinCoinsGui();//instantiate window object
        window.setVisible(true);
    }
}

【问题讨论】:

    标签: jbutton jtextfield keylistener


    【解决方案1】:

    不需要ActionListener,只需要制作按钮the default button for your window

    setDefaultButton(calculateBtn);
    

    然后,该按钮将具有独特的外观,并在您在另一个控件(例如 TextBox)上按 Return 时被调用。

    【讨论】:

    • 谢谢。然而,似乎很简单,我试图在CalculateBtnListener 类中输入它无济于事。公共无效 setDefaultButton(JButton calculateBtn) { setDefaultButton(calculateBtn); }
    • 这应该是你的窗口初始化的一部分。
    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 2014-01-05
    • 2013-06-10
    • 2017-06-26
    • 1970-01-01
    • 2019-06-06
    • 2023-03-26
    • 2014-06-08
    相关资源
    最近更新 更多