[英]How to get components from a JFrame with a GridLayout?
我有一个关于Java和JFrame
的问题。 假设我有一个与GridLayout
使用的JFrame
。 假设我在JFrame
添加了JButton
,如何使用它的位置访问我想要的那个(按位置,我的意思是ax和ay,用于定义网格上的确切位置)。 我已经尝试了几种方法,例如getComponentAt(int x, int y)
,并且看到这些方法在与GridLayout
结合使用时不能按预期工作,或者至少在我的情况下不能按预期工作。 所以我尝试使用getComponent()
,这看起来很好。
最新的方法,似乎对我来说是正确的轨道是(假设我有一个带有7行和7列的GridLayout
的JFrame
,x作为列,y作为行):
public JButton getButtonByXAndY(int x, int y) {
return (JButton) this.getContentPane().getComponent((y-1) * 7 + x);
}
图片http://www.freeimagehosting.net/newuploads/9d6hq.jpg
使用上面的说法,我想把JButton
放在(4,4),意思是JFrame
的第25个JButton,我会首先索引前21个按钮,然后再添加4个按钮,最后访问我想要的JButton。 问题是这在理论上只是如此。 有任何想法吗?
PS抱歉链接到外部网站,但堆栈溢出不允许我上传图像,因为我没有所需的声誉。
此示例比较两种方法:
维护List<JButton>
并以代数方式计算索引。
扩展JButton
并允许每个按钮维护自己的网格位置。
GridLayout从0,0开始,JButton在(GridLayout中的4,4位)开始,意味着JFrame中的第32个(4 * 7 + 4而不是3 * 7 + 4)JButton。 对不起,如果我误解了这些问题:(
你可以试试:
public static JButton getButtonByXAndY(int x, int y) {
return (JButton) f.getContentPane().getComponent(y * 7 + x);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.