【问题标题】:Displaying a TextField on user interaction在用户交互时显示 TextField
【发布时间】:2013-02-13 22:04:27
【问题描述】:

我想仅当用户在输入字段中输入值时才显示 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 直到有一些事件(如 调整窗口大小、最小化和最大化窗口)才会变得可见强>。

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

【问题讨论】:

  • 由于您使用的是布局管理器,您可能需要在内容窗格上调用 validate()。当您最大化/最小化窗口时,这可能会发生。

标签: java swing


【解决方案1】:

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

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

【讨论】:

  • 谢谢。你能推荐一本Java GUI开发的好书吗?
  • @Snehasish:我不是 GUI 专家,但我学到的关于 Swing 的大部分知识都是通过Java Swing tutorials 和这个网站学到的。我还推荐 Haase 和 Guy 的 Filthy Rich Clients
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多