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