2012-04-12 29 views
10

このテキストフィールドでマウスがクリックされると、テキストフィールドからテキストをクリアする必要があります。私はいくつかのことを試みましたが、彼らのどれもまだ私のために働いていません。ここでJTextFieldをマウスでクリックしたときにJTextFieldをクリアする方法

は、全体のコードです:

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

* "ここにコード全体があります。" '全体の'クラスにはインポートが必要です。もっと早く助けを求めるには、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

23

TL; DR

とにかく、MouseAdapterとオーバーライドmouseClickedを登録すると、私はこの例では、取得を願って、私のため

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

を働きましたあなたは正しい方向にスタートしました!

+0

ありがとう!それは私のために素晴らしい仕事! –

+0

@JimHalpert、あなたも大丈夫です、ジム。 – 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

サブクラス化は、本当に新しい機能を追加することはできません。公開されることを意図していない公開APIを公開することは、OO-worldの罪です:_) – 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 

、私は単にMouseListenerを使用します。カスタム1を作ることの利点は以下のとおりです。

  1. 私はそれが直接私がユーザーのためのオプションを含む、カスタマイズのcraptonを(行うことができます(代わりに、いくつかの混乱の匿名内部クラスを使用することの)のMouseListener
  2. を実装することができますTextFieldを右クリックしてPopupMenuから項目を選択する//現在、コピー、貼り付け、ドラッグ&ドロップのオプションを使用しています。
  3. これを行うには、.javaメインファイルMikeWarren.getAnswer(this) extends richard.getAnswer(this)ですが、もう少し詳しく説明し、私が実際に使っていたコードをいくつか見せてくれると思いました。プログラム。
+0

1.間違っています:一般公開用ではないapiを公開しない2.サブクラス化せずにポップアップをインストールする方法はsetComponentPopupMenu、すべてのtextComponentsには既にコピー/ペースト/カットアクションがあり、ポップアップで使用することができます。3.あなたがあまりにも多くのものをカップリングしているように聞こえる:ビューからデータを分離して、「クラウディング」の大部分をクリーンアップします。今までサブクラス化する:-) – kleopatra

0

public JTextField userInput;テキストを実行した後

右:

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) { 

      } 
     }); 

この方法を試すこともできます。

関連する問題