java - 在点击鼠标的位置添加了一个 JTextField

标签 java swing jtextfield

我正在尝试在发生鼠标单击的位置添加一个 JTextField。文本字段的大小应该根据输入的文本而变化。下面是我的代码。

public class Paint {
    public static void main(String[] args) {
        final JFrame frame = new JFrame("Test TextField");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.setSize(400, 250);
        final JTextField text = new JTextField();
        frame.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent me) {

            }
        });
        frame.setVisible(true);
    }
}

我想在鼠标单击发生的位置添加文本字段。文本字段的大小应根据在文本字段中输入的文本而增加。有人可以让我知道如何实现鼠标单击方法来实现相同的目的吗?

我尝试使用像这样的事件 x 和 y 位置来设置文本框的边界

text.setBounds(event.getX(), event.getY(), event.getX(), event.getY());

但有了这个,textField 的大小与全帧相同。但我想要一个大小不一的小文本框

最佳答案

首先,我们需要移除布局以便能够在我们想要的地方添加组件

frame.setLayout(null);

然后,我们可以检查事件的结果:

frame.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent event) {
        System.out.println(event.getX() + " " + event.getY());
    }
}

我们可以注意到,如果我们点击左上角,我们无法获得 (0,0) 坐标。因为 frame 是完整的屏幕,所以我们需要使用 ContentPane 或者我们可以简单地使用 JPanel 保持简单。

final JPanel panel = new JPanel();
panel.setLayout(null);
frame.getContentPane().add(panel);
panel.addMouseListener(new MouseAdapter() {}); //Use the MouseAdapter to not be force to override the full interface of MouseListener.

现在,让我们添加一个点击组件。首先,我们在 Activity 期间创建它(每次创建一个新的并设置大小:

final JTextField text = new JTextField();
text.setSize(new Dimension(50, 18)); //I took those randomly...

重要的部分是位置,将其设置为像这样的组件:

text.setLocation(event.getX(), event.getY());

并将其添加到面板

panel.add(text);

结果是在点击的特定位置添加了一个新的 JTextField


完整测试代码

public static void main(String[] args) {
    final JFrame frame = new JFrame("Test TextField");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 250);

    final JPanel panel = new JPanel();
    panel.setLayout(null);
    panel.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent event) {
            final JTextField text = new JTextField("abc");
            text.setLocation(event.getX(), event.getY());
            text.setSize(new Dimension(50, 18));
            panel.add(text);
        }
    });

    frame.getContentPane().add(panel);
    frame.setVisible(true);
}

请注意,这不是 Swing 的最佳用法,布局可以轻松构建高效的屏幕。

关于java - 在点击鼠标的位置添加了一个 JTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293725/

相关文章:

java - JTextField 在文本更新后响应按键事件

java - 通过与另一个 Set 中的键匹配来添加 Map 中的 BigDecimals

java - 64位VM不启动指针压缩,导致-8内存对齐

java - 并发消费者仍确保顺序

java - 在 Spring JPA for mongodb 中运行自定义删除查询时如何利用 Pageable?

java - 如何使用元素的中心将 BoxLayout 中的元素居中?

java - GUI 卡住并从用户输入输出到 JTextField

java - 未最大化时,线条绘制在错误的位置

java - 如何使 JDialog 永远不会位于顶部(在一个应用程序内,而不是在系统范围内)

java - 变量不会从 JTextField 获取数据