我正在尝试在鼠标单击发生的位置添加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的大小与完整帧相同。但我想要一个不同大小的小文本框
答案 0 :(得分:0)
首先,我们需要删除布局,以便能够在我们想要的地方添加组件
frame.setLayout(null);
然后,我们可以用以下方法检查事件的结果:
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent event) {
System.out.println(event.getX() + " " + event.getY());
}
}
我们可以注意到,如果我们点击左上角,我们就无法获得(0,0)坐标。由于A 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.
现在,让我们点击添加一个组件。首先,我们在活动期间创建它(每次创建一个新的,我们设置大小:
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的最佳用法,布局可以轻松构建高效的屏幕。