我想仅当用户在输入字段中输入值时显示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());
}
}
}
但我的问题是 显示JTextField 在看到调整窗口大小,最小化和最大化窗口等事件之前不会显示
我尝试在keyReleased方法中调用 frame.repaint(),但即使它没有帮助。
答案 0 :(得分:4)
在将文本字段组件放入容器后,应该在包含JTextField的容器上调用revalidate()
和repaint()
。 revalidate()
调用向容器的布局管理器发送请求以重新布局其组件。然后repaint()
请求绘图管理器的JVM请求重新绘制新布局的容器及其子组件。重绘()并不总是需要,但通常是一个好主意。
此外,不要为此使用KeyListener,而是在第一个文本组件的Document上使用DocumentListener。这样,如果用户清空了第一个文本组件,则可以根据需要使第二个文本组件消失。此外,可以在没有按键的情况下输入文本,并且您希望允许该文本。