1

我只想在用户在输入字段中输入值时显示 TextField

这是我的代码:

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class PlayingAround {

    JFrame frame;
    JTextField display;
    JTextField input;

    public static void main(String[] args) {
        PlayingAround obj = new PlayingAround();
        obj.create();
    }

    private void create() {
        frame = new JFrame();
        display = new JTextField();
        input = new JTextField();
        display.setEditable(false);
        display.setVisible(false);

        input.addKeyListener(new Listener());
        frame.add(BorderLayout.NORTH, display);
        frame.add(BorderLayout.SOUTH, input);

        frame.setSize(300, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    class Listener implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {
        }

        @Override
        public void keyPressed(KeyEvent e) {
        }

        @Override
        public void keyReleased(KeyEvent e) {
            display.setVisible(true);
            display.setText(input.getText());
        }
    }
}

但我的问题是Display JTextField直到出现Resizing the Window, Minimizing and maximizing the Window 之类的事件才会变得可见。

我尝试在 keyReleased 方法中调用frame.repaint()但即使它也没有帮助。

4

1 回答 1

4

在将文本字段组件放入容器后,您应该在包含 JTextField 的容器上调用revalidate()和。repaint()revalidate()调用向容器的布局管理器发送请求以重新布局其组件。然后repaint()请求绘制管理器的 JVM 请求重绘新布局的容器及其子组件。repaint() 并不总是需要,但通常是个好主意。

此外,不要为此使用 KeyListener,而是在第一个文本组件的 Document 上使用 DocumentListener。这样,如果用户清空第一个文本组件,您可以根据需要使第二个文本组件消失。此外,无需按键即可输入文本,您希望允许这样做。

于 2013-02-13T22:06:34.940 回答