我基本上想将300 x 300的JFrame窗口划分为30个正方形(而不是分别绘制它们),并能够访问每个正方形(也许将它们放入array / arraylist / stack / vector / etc)。在不编写30次drawRect(x,y,width,height)的情况下可以吗?提前致谢。

最佳答案

您可以将组件保留在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 );
    }
}

10-06 00:57