teclado tecla keypressed foco eventos evento esperar con cambiar activar java swing jframe awt

keypressed - con el uso de la tecla enter de la placa clave en lugar del clic del mouse con java



keypressed java (2)

Estoy tratando de hacer que la tecla enter reaccione en lugar del clic del mouse.

No tengo idea de cómo hacerlo usando Java.

aquí está el código y la salida.

import java.util.Random; import javax.swing.*; import java.util.Arrays; import java.text.DecimalFormat; import java.awt.event.*; import java.awt.*; public class PayRate extends JFrame { private JPanel panel; private JLabel rateLabel; private JLabel hoursLabel; private JLabel payLabel; private JTextField rateTextField; private JTextField hoursTextField; private JTextField payTextField; private JButton calcButton; private JButton clearButton; private final int WINDOW_WIDTH = 350; private final int WINDOW_HEIGHT = 160; public PayRate() { setTitle("PAY RATE"); setSize(WINDOW_WIDTH, WINDOW_HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); buildPanel(); add(panel); setVisible(true); } private void buildPanel() { rateLabel = new JLabel("RATE"); hoursLabel = new JLabel("HOUR"); payLabel = new JLabel(""); rateTextField = new JTextField(8); hoursTextField = new JTextField(8); payTextField = new JTextField(27); calcButton = new JButton("CALCULATE PAY"); clearButton = new JButton(" CLEAR "); calcButton.addActionListener(new CalcButtonListener()); clearButton.addActionListener(new clearButtonListener()); getRootPane().setDefaultButton(calcButton); // make the enter key react instead of mouse click //calcButton.setMnemonic(KeyEvent.VK_E); // make (ALT + E) response as an enter key panel = new JPanel(); payTextField.setBackground(Color.ORANGE); rateTextField.setBackground(Color.LIGHT_GRAY); // Set the Background of rateTextField to LIGHT_GRAY hoursTextField.setBackground(Color.LIGHT_GRAY);// Set the Background of hoursTextField to LIGHT_GRAY calcButton.setBackground(Color.GREEN); // Set the background of CalcButton to GREEN rateLabel.setForeground(Color.BLUE); // set the Foreground of rate label to blue hoursLabel.setForeground(Color.BLUE); // set the Foreground of hours label to blue payLabel.setForeground(Color.BLUE); // set the Foreground of pay label to blue panel.setBackground(Color.PINK);// Set the background of the panel to yellow panel.add(rateLabel); // Add rate label to the panel panel.add(rateTextField); // add rate text field to the panel panel.add(hoursLabel); // add hour label to the panel panel.add(hoursTextField); // add hours text field to the panel panel.add(calcButton); // add calculate button to the panel panel.add(payLabel); // add the pay label to the panel panel.add(payTextField); // add pay text field to the panel panel.add(clearButton); } private class CalcButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { double rt ; String input; String display =""; String output = " Your total pay for this week is: "; double hrs; double sum = 0; DecimalFormat formatter = new DecimalFormat("#0.00"); input = rateTextField.getText(); rt = Double.parseDouble(input); input = hoursTextField.getText(); hrs = Double.parseDouble(input); sum = hrs * rt; display = display + output.toUpperCase() + formatter.format(sum); payTextField.setText(display); } } private class clearButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { payTextField.setText(""); hoursTextField.setText(""); rateTextField.setText(""); } } public static void main(String[] args) { new PayRate(); } }

Aquí está la salida.

Quiero que el botón calcular el pago reaccione para ingresar la clave en lugar de hacer clic con el mouse.

Gracias de antemano.


Agrega este código

public PayRate(){ setTitle("PAY RATE"); setSize(WINDOW_WIDTH, WINDOW_HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); buildPanel(); add(panel); setVisible(true); getRootPane().setDefaultButton(calcButton);// here it is }


Opción 1: haga que el JButton de interés sea el botón predeterminado para JRootPane de su JFrame:

calcButton = new JButton("CALCULATE PAY"); calcButton.addActionListener(new CalcButtonListener()); getRootPane().setDefaultButton(calcButton); // **** add this line ****

Opción 2: agregue el mismo ActionListener a sus JTextFields:

CalcButtonListener calcListener = new CalcButtonListener(); calcButton.addActionListener(calcListener); rateTextField.addActionListener(calcListener); payTextField.addActionListener(calcListener);

Editar
Usted pregunta en comentario:

¿Qué sucede si quiero que otra tecla (como la tecla de espacio) reaccione como la tecla Intro? ¿es eso posible?

Responder:
Un JButton ya está conectado para responder a la tecla de espacio presionada si el botón tiene el foco. De lo contrario, 1) configure la tecla mnemotécnica del botón para responder a una combinación de teclas alt, o 2) use enlaces de teclas para vincular el botón a cualquier tecla o combinación de teclas.

Un ejemplo de un mnemotécnico:

calcButton.setMnemonic(KeyEvent.VK_C);

Si agrega esto a su programa, verá que la primera "C" en el texto del botón está subrayada. Su botón también responderá a presiones alt-c .