2011-04-18 73 views
0

我使用BorderLayoutJFrame中添加了JTextField
现在我想知道JTextField的位置。获取JFrame中JTextField的坐标

我用getX()getLocation(),但都给我0,这不是正确的答案。
那么我如何获得该位置?

+0

你为什么要这些信息?或者,您试图向最终用户提供哪些功能(并且不要忘记最终用户可以**看到** JTextField所在的位置,而不需要被告知)? – 2011-04-18 15:49:13

回答

2

的成分(JTextField)调用getLocation()应该回到它的坐标相对父容器(在下面的例子中,JFrame)。

注意:你将不得不做布局容器(JFrame之前得到的坐标。
只需显示它即可完成布局。

JFrame fr = new JFrame("Testing window"); 
JTextField tf = new JTextField(); 
fr.add(tf, BorderLayout.CENTER); 

fr.setVisible(true); //show the JFrame 

Point p = tf.getLocation(); //get the coordinates 
+1

不好的例子,你不应该为BorderLayout约束硬编码“中心”。 – camickr 2011-04-18 16:57:42

+0

@camickr你是对的。我只是想让事情变得更简单。无论如何,这不是这个例子的重点。 – 2011-04-18 17:01:09

+0

@camickr为什么硬编码中心不好? – Ramses 2014-05-31 19:43:58

2

getLocation()方法给出了组件相对于其父窗口在本例中为内容窗格的位置,因此该位置实际上可能为0.此外,在帧可见之前,您无法调用该方法。

如果你想相对于框架的位置,然后你需要使用

SwingUtilities.convertPoint(...); 
+0

+1不知道该方法,谢谢。 – Boro 2011-04-18 16:01:41