gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:26 25 4
gpt4 key购买 nike

我正在尝试在发生鼠标单击的位置添加一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com