Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 强制JTextField在显示时选择其所有内容_Java_Swing_Jtextfield - Fatal编程技术网

Java 强制JTextField在显示时选择其所有内容

Java 强制JTextField在显示时选择其所有内容,java,swing,jtextfield,Java,Swing,Jtextfield,我有一个JLabel,当你点击它时,它会被一个JTextField替换,我需要JTextField自动选择它出现时的所有文本 谢谢你的帮助 JTextField类在其API中包含用于此目的的方法 这有助于: 解决方案一:通过焦点事件完成。这不是最好的解决办法 public static void main(final String[] args) { // simple window preparation final JFrame f = new JFrame(); f

我有一个
JLabel
,当你点击它时,它会被一个
JTextField
替换,我需要
JTextField
自动选择它出现时的所有文本


谢谢你的帮助

JTextField类在其API中包含用于此目的的方法

这有助于:


解决方案一:通过焦点事件完成。这不是最好的解决办法

public static void main(final String[] args) {
    // simple window preparation
    final JFrame f = new JFrame();
    f.setBounds(200, 200, 400, 400);
    f.setVisible(true);

    { // this sleep part shall simulate a user doing some stuff
        try { 
            Thread.sleep(2345);
        } catch (final InterruptedException ignore) {}
    }

    { // here's the interesting part for you, this is what you put inside your button listener or whatever
        final JTextField t = new JTextField("Hello World!");
        t.addFocusListener(new FocusListener() {
            @Override public void focusLost(final FocusEvent pE) {}
            @Override public void focusGained(final FocusEvent pE) {
                t.selectAll();
            }
        });
        f.add(t);
        f.validate();

        t.requestFocus();
    }
}
这就是你需要的

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SelectAll
{
    private int count = 0;

    private void displayGUI()
    {
        JFrame frame = new JFrame("Select All");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        final JPanel contentPane = new JPanel();
        JButton addButton = new JButton("Add");
        addButton.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                JTextField tfield = new JTextField(10);
                tfield.setText("" + (++count));             
                contentPane.add(tfield);
                tfield.requestFocusInWindow();
                tfield.selectAll();

                contentPane.revalidate();
                contentPane.repaint();
            }
        });

        contentPane.add(addButton);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
    public static void main(String... args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new SelectAll().displayGUI();
            }
        });
    }
}

你在找什么?在我问这个问题之前我试过这两种方法,这个答案的问题是它不起作用。另外,这个答案的另一个问题是,文本字段只有在您单击它的文本后才获得焦点,而不是在它出现时查看如何为Swing组件提供焦点更新您的代码您已经尝试过的内容然后它很容易修复似乎您必须结合使用selectAll()才能获得所需的效果。如我的编辑所示。谢谢你的回复,它真的帮助了我使用Thread.sleep的目的是什么?在Swing应用程序中,这通常被认为是一种不好的做法,它只是让字段在延迟后弹出,而不是执行所有这些操作。单击按钮隐藏元素newelement pop sup gets cus all被选中,这是他在原始问题中提到的。但我会编辑我的帖子,让它更清晰。>这不是最好的解决方案为什么?这个解决方案有什么问题,你能详细解释一下吗?@madoh顺便说一句,现在我明白了,我有一个后续问题:当你说“Swing中的Thread.sleep()是不好的做法”时,你实际上是指EDT中的Thread.sleep(),或者以任何其他方式阻止它,对吗?