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
.