如何在鼠标单击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() 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 } }
TL; DR
无论如何,注册MouseAdapter
并覆盖mouseClicked
对我MouseAdapter
,
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(); } }); } }
我希望这个例子让你开始朝着正确的方向前进!
您只需将FocusListener
添加到文本字段即可。
final JTextField textField = new JTextField("Enter text here..."); textField.addFocusListener(new FocusListener(){ @Override public void focusGained(FocusEvent e){ textField.setText(""); } });
这对我有用。 当然,单击时会清除文本,您可以输入新文本。 要通过单击再次清除文本,文本字段必须失去焦点,然后从鼠标重新获得焦点。 我不完全确定你在这里寻找什么。
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 } }
是要清除’提示’文字吗?
我想这就是你要做的……
textField.addMouseListener(new MouseAdapter()) { public void mouseClicked(MouseEvent e) { if(textField.getText().equals("Default Text")) { textField.setText(""); repaint(); revalidate(); } } });
我也必须这样做。 我所做的只是制作一个自定义的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
。 制作自定义产品的优点是:
- 我可以让它直接实现MouseListener(而不是使用一些令人困惑的匿名内部类)
- 我可以制作自定义内容(包括用户右键单击TextField并从PopupMenu中选择一个项目的选项.//我正在处理用户复制,粘贴和拖放的选项。
- 我可以完成所有这些操作而不会占用主
.java
文件以及额外的代码,这些代码可以在以后挖掘更多东西。 虽然MikeWarren.getAnswer(this) extends richard.getAnswer(this)
,但我想我会详细说明一下,并在我的一个程序中显示一些我实际使用过的代码。
public JTextField userInput;
在执行文本后立即:
userInput.setText( “”); //空
这应该做。
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) { } });
你也可以尝试这种方法。
- ClassNotFoundException:org.hibernate.service.jndi.JndiException
- 用于在Java中查找Shared Mutable数据错误的工具
- Java同步HashMap中的size(),put(),remove(),get()是否为primefaces?
- 如何在java中进行精灵跳转?
- Java Collections.sort(节点)使用什么类型?
- 如何为apache commons httpclient注册url处理程序
- 在没有If-Statements的情况下在Java中将Boolean转换为Integer
- Java中控制台应用程序中的Unicode输入
- 如何在不失透明度的情况下将图像转换为灰度?