EnterJava'da bir JTextField yazarken birinin bastığını algılamak mümkün mü ? Bir düğme oluşturmak ve varsayılan olarak ayarlamak zorunda kalmadan.
EnterJava'da bir JTextField yazarken birinin bastığını algılamak mümkün mü ? Bir düğme oluşturmak ve varsayılan olarak ayarlamak zorunda kalmadan.
Yanıtlar:
A JTextField
, ActionListener
tıpkı a JButton
olduğu gibi kullanmak üzere tasarlanmıştır . addActionListener()
Yöntemine bakın JTextField
.
Örneğin:
Action action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("some action");
}
};
JTextField textField = new JTextField(10);
textField.addActionListener( action );
Artık Enteranahtar kullanıldığında olay tetikleniyor .
Ayrıca, ek bir avantaj, düğmeyi varsayılan düğme yapmak istemeseniz bile dinleyiciyi bir düğmeyle paylaşabilmenizdir.
JButton button = new JButton("Do Something");
button.addActionListener( action );
Not: Bu örnek, bir kullanır Action
, ki uygular ActionListener
, çünkü Action
ek özelliklere sahip yeni bir API'dır. Örneğin Action
, etkinliği hem metin alanı hem de düğme için devre dışı bırakacak olanı devre dışı bırakabilirsiniz.
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
Tüm yapmanız gereken yukarıdaki gibi JTextField'e addActionListener'ı eklemek! EnterEylem bastıktan sonra ifadede istediğinizi gerçekleştirecektir!
İçin bir etkinlik ekleyin KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
tarafından büyük ölçüde giderilen birçok eksikliğe sahip KeyBindings
. OP'de sorulduğu gibi önemsiz görevler için bundan kaçınılmalıdır.
Böyle bir şey yapmak ister misin?
JTextField mTextField = new JTextField();
mTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
// something like...
//mTextField.getText();
// or...
//mButton.doClick();
}
}
});
Önce JButton veya JTextField'a eylem komutunu ekleyin:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
Ardından hem JTextField hem de JButton'a ActionListener ekleyin.
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
Bundan sonra, On you ActionListener uygulaması
@Override
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your actionCommand for press Enter"))
{
//Do something
}
}
Diğer cevaplar (kabul edilenler dahil) iyidir, ancak zaten Java8 kullanıyorsanız, aşağıdakileri yapabilirsiniz (daha kısa, daha yeni bir şekilde):
textField.addActionListener(
ae -> {
//dostuff
}
);
Kabul edilen cevabın söylediği gibi, ActionListener
Enter-Tuşunu yakalayan bir ile basitçe tepki verebilirsiniz .
Ancak benim yaklaşımım Java 8'de tanıtılan işlevsel kavramlardan yararlanıyor.
Örneğin bir düğme ve JTextField için aynı eylemi kullanmak istiyorsanız, aşağıdakileri yapabilirsiniz:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Daha fazla açıklama gerekiyorsa lütfen bana bildirin!
Bir JTextField girişinde varsayılan bir düğme eylemi ayarlamak istiyorsanız, bunu yapmanız gerekir:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
Bu [0], çünkü bir düğmenin birçok eylemi olabilir, ancak normalde yalnızca bir tane vardır (ActionPerformed).
Çerçevenizdeki her metin alanı için addKeyListener yöntemini çağırın. Ardından, diğerlerinin de belirttiği gibi keyPressed yöntemini uygulayın ve geçersiz kılın. Artık eyleminizi etkinleştirmek için çerçevenizdeki herhangi bir alandan enter tuşuna basabilirsiniz.
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
public void keyReleased(KeyEvent e)
{
int key=e.getKeyCode();
if(e.getSource()==textField)
{
if(key==KeyEvent.VK_ENTER)
{
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
}
}
'Enter tuşuna basın' mantığını yazmak için JTextField
, mantığı & keyReleased()
yerine bloğun içinde tutmak daha iyidir .keyTyped()
keyPressed()
KeyListeners
Dan yol çok düşük düzeyde olan Swing
perspektifinden. Olması amaçlanmıştır API kullanın Swing
:-) ile kullanılır
Sadece şu kodu kullanın:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);