জে টেক্সটফিল্ড এন্টার চাপুন সনাক্ত করুন


103

Enterজাভাতে জে টেক্সটফিল্ড টাইপ করার সময় কেউ চাপ দিলে কী সনাক্ত করা সম্ভব ? কোনও বোতাম তৈরি না করে এটিকে ডিফল্ট হিসাবে সেট করুন।

উত্তর:


168

একটি JTextFieldএকটি ব্যবহার করতে পরিকল্পনা করা হয়েছিল ActionListenerশুধু একটি মত JButtonহয়। এর addActionListener()পদ্ধতিটি দেখুনJTextField

উদাহরণ স্বরূপ:

Action action = new AbstractAction()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("some action");
    }
};

JTextField textField = new JTextField(10);
textField.addActionListener( action );

এখন ইভেন্টটি যখন বরখাস্ত করা হয় Enterকীটি ব্যবহার করা করা হয়।

এছাড়াও, একটি অতিরিক্ত সুবিধা হ'ল আপনি বোতামটি ডিফল্ট বোতামটি করতে না চাইলেও আপনি একটি বোতাম দিয়ে শ্রোতাদের ভাগ করতে পারেন can

JButton button = new JButton("Do Something");
button.addActionListener( action );

দ্রষ্টব্য, এই উদাহরণটিতে একটি ব্যবহার করে Action, যা প্রয়োগ করে ActionListenerকারণ Actionসংযোজন বৈশিষ্ট্য সহ একটি নতুন এপিআই। উদাহরণস্বরূপ আপনি এটি অক্ষম করতে পারেন Actionযা পাঠ্য ক্ষেত্র এবং বোতাম উভয়ের জন্য ইভেন্টটিকে অক্ষম করবে।


1
একমত। আমার চেয়ে আরও মার্জিত সমাধান, সাধারণ ক্ষেত্রে।
কোস

@ ক্যামিকার জাভা দোলনের একজন বিশেষজ্ঞ
মোহাম্মদ ইকজাস

23
JTextField function=new JTextField(8);   
function.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e){

                        //statements!!!

                }});

আপনাকে যা করতে হবে তা হ'ল উপরের মতো জে টেক্সটফিল্ডে অ্যাড্যাকশনলিস্টনার! আপনি চাপ Enterদেওয়ার পরে কর্মটি বিবৃতিতে যা চান তা সম্পাদন করবে!


16

এর জন্য একটি ইভেন্ট যুক্ত করুন KeyPressed

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
  if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
      // Enter was pressed. Your code goes here.
   }
} 

-1 :( KeyListeners সুইং পরিপ্রেক্ষিতে উপায় খুব নিম্ন স্তরের হয় এপিআই যা সুইং সঙ্গে :-) ব্যবহার করা দেয়ার উদ্দেশ্যে করা হচ্ছে ব্যবহার করুন।
চমৎকার গাভী

1
@ এনআইসিএইচওউ কী- লিস্টেনারগুলি সুইংয়ের দৃষ্টিকোণ থেকে খুব নীচু স্তর : উদ্ধৃতি প্রয়োজন।
গাইডো

2
@ ᴳᵁᴵᴰᴼ: খুব ভালভাবে নথিভুক্ত জিনিস, কী- বাইন্ডিংসের অফিশিয়াল টিউটোরিয়ালগুলিতে পাওয়া যাবে , যদিও স্ট্যাকওভারফ্লো সম্পর্কে খুব ভাল উত্তর , একই
দিকটিও অন্তর্ভুক্ত করে

1
@ এনআইসিএইচও আমি হ'ল ডক পৃষ্ঠাটি আমার মনে রেখেছিলাম। আমি শর্টকাট এবং ক্রিয়াকলাপের জন্য বাইন্ডিংগুলি পছন্দ করার পরামর্শ দেওয়ার মধ্যে অনেক পার্থক্য পেয়েছি , কেবল নিম্ন-স্তরের কীবোর্ড নিয়ন্ত্রণের জন্য শ্রোতাদের ব্যবহার করুন এবং এটি ব্যবহার করবেন না কারণ এটি ভুল এপিআই । ডক পৃষ্ঠাগুলিও এত কালো এবং সাদা নয়।
গাইডো

1
@ ᴳᵁᴵᴰᴼ: এর KeyListenersঅনেকগুলি ত্রুটি রয়েছে, যেগুলি KeyBindingsফোকাস সম্পর্কিত, অনুলিপি / পেস্ট সম্পর্কিত এবং আরও অনেকগুলি দ্বারা আরও বেশি পরিমাণে যত্ন নেওয়া হয় । এটি এড়ানো উচিত, যেমন অপ্রচলিত কাজের জন্য যেমন ওপিতে বলা হয় asked
নি

9

আপনি কি এই জাতীয় কিছু করতে চান?

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();
            }
        }

    });

1

প্রথমে জে বাটন বা জে টেক্সটফিল্ডে অ্যাকশন কমান্ড যুক্ত করুন:

JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");

তারপরে JTextField এবং JButton উভয়টিতে অ্যাকশনলিস্টনার যুক্ত করুন।

JButton.addActionListener(listener);
JTextField.addActionListener(listener);

এরপরে, আপনি অ্যাকশনলিস্টনার বাস্তবায়ন লিখন

@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
    }
}

1

অন্যান্য উত্তর (স্বীকৃত উত্তরগুলি সহ) ভাল, তবে আপনি যদি ইতিমধ্যে জাভা 8 ব্যবহার করেন তবে আপনি নিম্নলিখিতটি (আরও সংক্ষিপ্ততর, আরও নতুনভাবে) করতে পারেন:

textField.addActionListener(
    ae -> {
        //dostuff
    }
);

গৃহীত উত্তর যেমনটি বলেছে, আপনি কেবল একটি সাথে প্রতিক্রিয়া জানাতে পারেন ActionListener, যা এন্টার-কীটি ধরেছে।

যাইহোক, আমার পদ্ধতির জাভা 8 এ চালু হওয়া কার্যকরী ধারণাগুলির সুবিধা গ্রহণ করে।

আপনি যদি একটি বোতাম এবং জে টেক্সটফিল্ডের উদাহরণস্বরূপ একই ক্রিয়াটি ব্যবহার করতে চান তবে আপনি নিম্নলিখিতটি করতে পারেন:

ActionListener l = ae -> {
    //do stuff
}

button.addActionListener(l);
textField.addActionListener(l);

যদি আরও ব্যাখ্যা প্রয়োজন হয়, দয়া করে আমাকে জানান!


0

আপনি যদি কোনও জেেক্সটফিল্ড প্রবেশের ডিফল্ট বোতাম ক্রিয়া সেট করতে চান তবে আপনাকে এটি করতে হবে:

//put this after initComponents();

textField.addActionListener(button.getActionListeners()[0]);

এটি [0] কারণ একটি বোতামটিতে প্রচুর ক্রিয়া থাকতে পারে তবে সাধারণত কেবল একটি থাকে (অ্যাকশনপ্রাপ্ত)।


0

আপনার ফ্রেমের প্রতিটি পাঠ্য ক্ষেত্রের জন্য, addKeyListener পদ্ধতিটি অনুরোধ করুন। তারপরে কী চাপানো পদ্ধতিটি বাস্তবায়ন এবং ওভাররাইড করুন, যেমন অন্যরা ইঙ্গিত করেছে। আপনার ক্রিয়াটি সক্রিয় করতে এখন আপনি নিজের ফ্রেমের যে কোনও ক্ষেত্র থেকে এন্টার টিপতে পারেন।

@Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                //perform action
            }
        }

-2
public void keyReleased(KeyEvent e)
{
    int key=e.getKeyCode();
    if(e.getSource()==textField)
    {
        if(key==KeyEvent.VK_ENTER)
        { 
            Toolkit.getDefaultToolkit().beep();
            textField_1.requestFocusInWindow();                     
        }
    }

'এন্টার টিপুন' এর জন্য যুক্তি লেখার জন্য , & এর পরিবর্তে JTextFieldলজিকটিকে keyReleased()ব্লকের ভিতরে রাখা ভাল ।keyTyped()keyPressed()


1
-1 :( আবার একই ভুলটি পুনরাবৃত্তি করার জন্য যা পূর্ববর্তী উত্তরগুলিতে ইতিমধ্যে ডাউন-ভোটাভুটির সাথে সাথে এর নির্দিষ্ট কারণও রয়েছে। এর দৃষ্টিকোণ KeyListenersথেকে খুব কম স্তর Swing। সঙ্গে ব্যবহার Swing :-)
NICE গাভী

-3

কেবল এই কোডটি ব্যবহার করুন:

SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.