2012-04-12 24 views
10

पर क्लिक करता है तो JTextField को साफ़ करने के लिए मुझे माउस को उस टेक्स्ट फ़ील्ड में क्लिक करते समय टेक्स्ट फ़ील्ड से पाठ को साफ़ करने की आवश्यकता होती है। मैंने कुछ चीजों की कोशिश की है, लेकिन उनमें से कोई भी मेरे लिए काम नहीं कर रहा है। MouseAdapter और अधिभावी mouseClicked मेरे लिए काम किया एक,जब JTextField

import java.awt.FlowLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

public class ClickAndClearDemo { 
    private static void createAndShowGUI(){ 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20)); 

     final JTextField textField = new JTextField("Enter text here..."); 
     textField.addMouseListener(new MouseAdapter(){ 
      @Override 
      public void mouseClicked(MouseEvent e){ 
       textField.setText(""); 
      } 
     }); 

     frame.add(textField); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

मुझे आशा है कि इस उदाहरण हो जाता है दर्ज की, वैसे भी डॉ

;

public class TimerClassPanel extends JFrame implements MouseListener{ 

    public TimerClassPanel(){ 
     setTitle("Timer Class"); 
     setSize(WIDTH, HEIGHT); 

     timer = new Timer(DELAY, new TimerEventHandler()); 

     pane = getContentPane(); 
     pane.setLayout(null); 

     int r = (int)(9.0 * Math.random()) + 1; 
     String str2 = Integer.toString(r); 

     label = new JLabel(str2, SwingConstants.CENTER); 
     label.setSize(150,30); 
     label.setLocation(0,0); 

     textField = new JTextField(); 
     textField.setSize(150,30); 
     textField.setLocation(150,0); 

     startB = new JButton("Start"); 
     startbh = new StartButtonHandler(); 
     startB.addActionListener(startbh); 
     startB.setSize(100,30); 
     startB.setLocation(0,30); 

     stopB = new JButton("Stop"); 
     stopbh = new StopButtonHandler(); 
     stopB.addActionListener(stopbh); 
     stopB.setSize(100,30); 
     stopB.setLocation(100,30); 

     exitB = new JButton("Exit"); 
     ebHandler = new ExitButtonHandler(); 
     exitB.addActionListener(ebHandler); 
     exitB.setSize(100,30); 
     exitB.setLocation(200,30);  

     pane.add(label); 

     pane.add(textField); 
     pane.add(startB); 
     pane.add(stopB); 
     pane.add(exitB); 

     timer = new Timer(DELAY, new TimerEventHandler()); 

     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    private class TimerEventHandler implements ActionListener{ 
     public void actionPerformed(ActionEvent e){ 
      int r = (int)(9.0 * Math.random()) + 1; 
      String str = Integer.toString(r); 
      currentNum = ""; 
      currentNum = str; 
      label.setText(str); 
      repaint(); 
     } 
    } 

    public class StartButtonHandler implements ActionListener{ 
     public void actionPerformed(ActionEvent e){ 
      timer.start(); 
     } 
    } 

    public class StopButtonHandler implements ActionListener{ 
     public void actionPerformed(ActionEvent e){ 
      timer.stop(); 
     } 
    } 

    private class ExitButtonHandler implements ActionListener{ 
     public void actionPerformed(ActionEvent e){ 
      System.exit(0); 
     } 
    } 

    public static void main(String[] args){ 
     TimerClassPanel timerPanel = new TimerClassPanel(); 
     JOptionPane.showMessageDialog(null, "Type your guess (int between 1-9)" + 
       " in the field then press 'ENTER'"); 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
     if(e.getX() > 150 && e.getX() < 300 && e.getY() > 0 && e.getY() < 30) 
     { 
      textField.setText(""); 
      repaint(); 
     } 
    } 

    @Override 
    public void mouseEntered(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseExited(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mousePressed(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void mouseReleased(MouseEvent arg0) { 
     // TODO Auto-generated method stub 

    } 
} 
+1

* "यहां पूरी तरह से कोड है:" 'संपूर्ण' वर्ग को आयात की आवश्यकता होगी।बेहतर सहायता के लिए जल्द ही, एक [एसएससीसीई] (http://sscce.org/) पोस्ट करें। –

उत्तर

23

टी एल:

यहाँ अपनी संपूर्णता में कोड है आपने सही दिशा में शुरू किया!

+0

धन्यवाद! यह मेरे लिए बहुत अच्छा काम किया !! –

+0

@ जिमहैल्पर, आपका स्वागत है, जिम। – user1329572

+0

@JimHalpert, अगर इस उत्तर में मदद मिली, तो कृपया इसे स्वीकार करें (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – user1329572

3

यह मेरे लिए काम किया। बेशक, जब आप क्लिक करते हैं तो पाठ साफ़ हो जाता है, और आप नया टेक्स्ट दर्ज कर सकते हैं। एक क्लिक के माध्यम से टेक्स्ट को फिर से साफ़ करने के लिए, टेक्स्टफील्ड को फोकस खोना होगा और फिर माउस से फोकस प्राप्त करना होगा। मैं पूरी तरह से यह सुनिश्चित नहीं कर रहा हूं कि आप यहां क्या खोज रहे हैं।

import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class ClickTextField extends JTextField implements MouseListener{ 

public static void main(String[] args) { 
    new ClickTextField(); 
} 

public ClickTextField() { 
    addMouseListener(this); 

    JFrame J = new JFrame(); 
    J.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    J.setSize(100,100); 
    J.getContentPane().add(this); 
    setText("Texty text..."); 
    J.show(); 
} 

@Override 
public void mouseClicked(MouseEvent e) { 

    setText(""); 

} 

@Override 
public void mousePressed(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseReleased(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseEntered(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void mouseExited(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

} 
+0

सबक्लासिंग उप-इष्टतम है यदि आप डॉन करते हैं वास्तव में नई कार्यक्षमता जोड़ें (उर्फ: कॉन्फ़िगरेशन द्वारा पहुंच योग्य नहीं)। सार्वजनिक एपीआई का खुलासा करना जो सार्वजनिक रूप से उपयोग नहीं किया जा रहा है .. ओओ-दुनिया में एक पाप है: _) – kleopatra

8

आप बस पाठ फ़ील्ड के लिए एक FocusListener जोड़ सकते हैं।

final JTextField textField = new JTextField("Enter text here..."); 
    textField.addFocusListener(new FocusListener(){ 
     @Override 
     public void focusGained(FocusEvent e){ 
      textField.setText(""); 
     } 
    }); 
2

क्या यह 'संकेत' टेक्स्ट साफ़ करना है?

मुझे लगता है कि यह तुम क्या करने की कोशिश कर रहे हैं क्या है ...

textField.addMouseListener(new MouseAdapter()) 
    { 
     public void mouseClicked(MouseEvent e) 
     { 
      if(textField.getText().equals("Default Text")) 
      { 
       textField.setText(""); 
       repaint(); 
       revalidate(); 
      }   
     } 
    }); 
0

मैं इस रूप में अच्छी तरह करना था। मैंने जो किया वह बस कस्टम JTextField बना रहा था। कुछ की तरह:

import javax.swing.JMenuItem; 
import javax.swing.JPopupMenu; 
import javax.swing.JTextField; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

@SuppressWarnings("serial") 
public class InputField extends JTextField implements MouseListener,ActionListener 
{ 
public InputField(String text) 
{ 
    super(text); 
    super.setHorizontalAlignment(RIGHT); 
    super.addMouseListener(this); 
} 

@Override 
public void mouseClicked(MouseEvent e) 
{ 
    // TODO Auto-generated method stub 
    if (getText().equals("0.0")) 
    { 
     setText(""); 
    } 
} 

@Override 
public void mouseEntered(MouseEvent e) 
{ 

} 

@Override 
public void mouseExited(MouseEvent e) 
{ 

} 

@Override 
public void mousePressed(MouseEvent e) { 
    maybeShowPopup(e); 
    // if the mouse is pressed and "0.0" is the text, we erase the text 
    if (getText().equals("0.0")) 
    { 
     setText(""); 
    } 
} 

@Override 
public void mouseReleased(MouseEvent e) 
{ 
    maybeShowPopup(e); 
} 

private void maybeShowPopup(MouseEvent event) 
{ 
    //if the user clicked the right mouse button 
    if (javax.swing.SwingUtilities.isRightMouseButton(event)) 
    { 
     //create (and show) the popup 
     createPopup().show(event.getComponent(), event.getX(), event.getY()); 
    } 
} 

private JPopupMenu createPopup() 
{ 
    JPopupMenu popupMenu = new JPopupMenu(); 
    //add the clearTextOption to the JPopupMenu 
    JMenuItem clearTextOption = new JMenuItem("Clear text"); 
    clearTextOption.addActionListener(this); 
    popupMenu.add(clearTextOption); 
    return popupMenu; 
} 

@Override 
public void actionPerformed(ActionEvent arg0) { 
    //clear the TextField 
    setText(""); 
} 

} //end custom TextField 

इस कस्टम TextField में, मैं बस एक MouseListener इस्तेमाल किया। एक कस्टम बनाने के लाभ हैं:

  1. मैं इसे सीधे MouseListener लागू
  2. मैं (उपयोगकर्ताओं के लिए विकल्प सहित अनुकूलन के एक crapton कर सकते हैं (बजाय कुछ भ्रामक गुमनाम आंतरिक वर्ग का उपयोग करने की) हो सकता है टेक्स्टफिल्ड पर राइट-क्लिक करने के लिए और पॉपअपमेनू से एक आइटम का चयन करें। // मैं वर्तमान में उपयोगकर्ताओं को कॉपी, पेस्ट और ड्रैग-एंड-ड्रॉप करने के लिए विकल्पों पर काम कर रहा हूं।
  3. मैं इसे मुख्य .java फ़ाइल को भीड़ के बिना कर सकता हूं अतिरिक्त कोड के साथ जो बाद में खोदने के लिए और अधिक सामान के लिए बना देगा। हालांकि MikeWarren.getAnswer(this) extends richard.getAnswer(this), मैंने सोचा कि मैं थोड़ा और विस्तारित करूंगा और कुछ कोड दिखाऊंगा जो वास्तव में मेरे एक में उपयोग किया जाता है कार्यक्रम।
+0

1. गलत है: कभी भी एपीआई का खुलासा न करें जो सार्वजनिक उपयोग के लिए नहीं है 2. सबक्लासिंग के बिना पॉपअप स्थापित करने का तरीका सेट है कॉम्पोनेंटपॉपअपमेनू, सभी टेक्स्टकंपोनेंट्स में पहले से ही कॉपी/पेस्ट/कट एक्शन होते हैं जिनका उपयोग पॉपअप 3 में किया जा सकता है। लगता है जैसे आप बहुत सी चीजें जोड़ रहे हैं: दृश्य से डेटा को अलग करना "भीड़" में से अधिकांश को साफ करेगा - संक्षेप में: कोई कारण नहीं अब तक subclass करने के लिए :-) – kleopatra

0

सार्वजनिक JTextField उपयोगकर्ता इनपुट;

सही पाठ को क्रियान्वित करने के बाद:

userInput.setText (""); // खाली

ऐसा करना चाहिए।

0
jTextField2.addMouseListener(new MouseListener() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       if (e.getButton()==1) { 
        jTextField2.setText(""); 
       }//3 = for right click 
       //2 for middlemouse 
      } 

      @Override 
      public void mousePressed(MouseEvent e) { 

      } 

      @Override 
      public void mouseReleased(MouseEvent e) { 

      } 

      @Override 
      public void mouseEntered(MouseEvent e) { 

      } 

      @Override 
      public void mouseExited(MouseEvent e) { 

      } 
     }); 

आप इस दृष्टिकोण के साथ भी प्रयास कर सकते हैं।