繁体   English   中英

如何使用GridLayout从JFrame获取组件?

[英]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列的GridLayoutJFrame ,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抱歉链接到外部网站,但堆栈溢出不允许我上传图像,因为我没有所需的声誉。

示例比较两种方法:

  1. 维护List<JButton>并以代数方式计算索引。

  2. 扩展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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM