Uczę się teraz klasy Swing i wszystkiego na ten temat. Mam ten program zabawkowy, który układałem, który podpowiada nazwę, a następnie przedstawia JOptionPane z komunikatem "Wprowadziłeś (twoje imię)". Przycisk przesyłania, którego używam, można kliknąć tylko, ale chciałbym, aby działał również za pomocą przycisku Enter. Próbowałem dodać KeyListener, jak zaleca się w książce Java używam (Eventful Java, Bruce Danyluk i Murtagh).Po naciśnięciu przycisku "Wyślij" przycisk "Enter", a nie tylko za pomocą MouseClick
To jest mój kod:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class NamePrompt extends JFrame{
private static final long serialVersionUID = 1L;
String name;
public NamePrompt(){
setLayout(new BorderLayout());
JLabel enterYourName = new JLabel("Enter Your Name Here:");
JTextField textBoxToEnterName = new JTextField(21);
JPanel panelTop = new JPanel();
panelTop.add(enterYourName);
panelTop.add(textBoxToEnterName);
JButton submit = new JButton("Submit");
submit.addActionListener(new SubmitButton(textBoxToEnterName));
submit.addKeyListener(new SubmitButton(textBoxToEnterName));
JPanel panelBottom = new JPanel();
panelBottom.add(submit);
//Add panelTop to JFrame
add(panelTop, BorderLayout.NORTH);
add(panelBottom, BorderLayout.SOUTH);
//JFrame set-up
setTitle("Name Prompt Program");
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args) {
NamePrompt promptForName = new NamePrompt();
promptForName.setVisible(true);
}
}
I to jest klasa ActionListener, KeyListener:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class SubmitButton implements ActionListener, KeyListener {
JTextField nameInput;
public SubmitButton(JTextField textfield){
nameInput = textfield;
}
@Override
public void actionPerformed(ActionEvent submitClicked) {
Component frame = new JFrame();
JOptionPane.showMessageDialog(frame , "You've Submitted the name " + nameInput.getText());
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ENTER){
System.out.println("Hello");
}
Component frame = new JFrame();
JOptionPane.showMessageDialog(frame , "You've Submitted the name " + nameInput.getText());
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
}
}
To działa! Czy możesz wyjaśnić, dlaczego to działa? Co się stanie, jeśli chcę, aby przycisk Wyślij został naciśnięty klawiszem spacji? (tj. gdyby było więcej niż jeden przycisk). – CodyBugstein
Wystarczająco jasne? Chętnie pomogę :) –
Właściwie, zanim zaimplementowałem twoje rozwiązanie, okno dialogowe nie pojawiło się dla żadnego klawisza (nawet Enter). Co było nie tak? – CodyBugstein