在Java JFrame中绘制多个正方形并访问它们中的每一个?

时间:2012-02-06 17:01:47

标签: java swing canvas jframe

我基本上想要将一个300乘300的JFrame窗口划分为30个正方形(不单独绘制它们)并且能够访问每个正方形(可能将它们放入数组/ arraylist / stack / vector / etc) 。如果不写drawRect(x,y,width,height)30次,这可能吗?提前致谢。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

为什么不选择JTable呢?

答案 2 :(得分:2)

您可以将组件保存在ArrayList中并使用GridLayout 和以下片段:

getContentPane.setLayout(new GridLayout(x,y));

其中x和y分别表示行数和列数。 之后,您可以将组件添加到JFrame对象的内容中。

示例代码:

import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Window;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyFrame extends JFrame
{
    public static void main ( String [] args )
    {
        MyFrame myframe = new MyFrame();
        myframe.setSize( 300, 300 );
        myframe.setResizable( false );
        myframe.setLocationRelativeTo( null );
        myframe.setLayout( new GridLayout(3,3) );

        Container container = myframe.getContentPane();
        ArrayList < JPanel > components = new ArrayList < JPanel >();
        JPanel temp = null;

        // Populating Arraylist object.
        for ( int i = 0; i < 9; i++ )
        {
            temp = new JPanel();
            temp.setSize( 100,100 );
            components.add( temp );
            container.add(temp);
        }

        myframe.pack();
        myframe.setVisible( true );

        // Accessing components via index.
        components.get( 5 ).setBackground( Color.BLUE );
        components.get( 8 ).setBackground( Color.GREEN );
    }
}