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

时间:2012-05-31 10:07:10

标签: java swing jframe jbutton grid-layout

我对Java有疑问,特别是JFrame。假设我使用的JFrame GridLayoutJButton。假设我在JFrame中添加了getComponentAt(int x, int y) s,如何使用它的位置访问我想要的位置(按位置,我的意思是ax和ay,用于定义确切位置格)。我已经尝试了几种方法,例如GridLayout,并且看到这些方法在与getComponent()结合使用时无法按预期工作,或者至少在我的情况下不能按预期工作。所以我尝试使用JFrame,这看起来很好。

对我来说似乎正确的最新方法是(假设我有一个GridLayout,其中public JButton getButtonByXAndY(int x, int y) { return (JButton) this.getContentPane().getComponent((y-1) * 7 + x); } 有7行7列,x为列,y为行) :

JButton

image http://www.freeimagehosting.net/newuploads/9d6hq.jpg

使用上面的说法,我想得到JFrame at(4,4),意思是{{1}}中的第25个JButton,我会首先索引前21个按钮,然后再添加4个,最后访问我想要的JButton。问题是这在理论上只是如此。有什么想法吗?

P.S很抱歉链接到外部网站,但是堆栈溢出不允许我上传图片,因为我没有所需的声誉。

2 个答案:

答案 0 :(得分:2)

example比较了两种方法:

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

  2. 扩展JButton并允许每个按钮维护自己的网格位置。

答案 1 :(得分:1)

GridLayout从0,0和JButton开始 at(GridLayout中的4,4 -position)含义 第32个(4 * 7 + 4不是3 * 7 + 4)JButton JFrame中。对不起,如果我误解了这些问题:(

您可以尝试:

   public static JButton getButtonByXAndY(int x, int y) {
        return (JButton) f.getContentPane().getComponent(y * 7 + x);
    }