如何在鼠标单击JTextField时清除JTextField [英] How to clear JTextField when mouse clicks the JTextField

查看:153
本文介绍了如何在鼠标单击JTextField时清除JTextField的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当鼠标在该文本字段中单击时,我需要使该程序清除文本字段中的文本。我尝试过一些东西,但是没有一个能为我工作。



这是完整的代码:



'pre> 公共类TimerClassPanel延伸的JFrame实现的MouseListener {

公共TimerClassPanel(){
的setTitle( 定时器类);
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 =新JButton(开始);
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 =新JButton(退出);
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);
}

私人类TimerEventHandler实现的ActionListener {
公共无效的actionPerformed(ActionEvent的发送){
INT R =(int)的(9.0 *的Math.random()) + 1;
String str = Integer.toString(r);
currentNum =;
currentNum = str;
label.setText(str);
repaint();
}
}

公共类StartButtonHandler实现ActionListener {
public void actionPerformed(ActionEvent e){
timer.start();
}
}

公共类StopButtonHandler实现ActionListener {
public void actionPerformed(ActionEvent e){
timer.stop();
}
}

私有类ExitButtonHandler实现ActionListener {
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}

public static void main(String [] args){
TimerClassPanel timerPanel = new TimerClassPanel();
JOptionPane.showMessageDialog(null,键入你的猜测(在1-9之间为int)+
在字段中然后按'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自动生成的方法stub

}

@Override
public void mouseExited(MouseEvent arg0){
// TODO自动生成方法存根

}

@Override
public void mousePressed(MouseEvent arg0){
// TODO自动生成的方法stub

}

@Override
public void mouseReleased(MouseEvent arg0){
// TODO自动生成方法存根

}
}


解决方案

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(在这里输入文字......);
textField.addMouseListener(新MouseAdapter(){
@覆盖
公共无效的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();
}
});
}
}

我希望这个例子让你开始朝着正确的方向前进!


I need to make this program clear the text from the text field when the mouse clicks in that text field. I have tried a few things, but none of them have yet to work for me.

Here is the code in its entirety:

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

    }
}

解决方案

TL;DR

Anyway, registering a MouseAdapter and overriding mouseClicked worked for me,

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

I hope this example gets you started in the right direction!

这篇关于如何在鼠标单击JTextField时清除JTextField的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆