在JavaJFrame中绘制多个正方形并访问其中的每一个?

在JavaJFrame中绘制多个正方形并访问其中的每一个?,java,swing,canvas,jframe,Java,Swing,Canvas,Jframe,我基本上想把一个300×300的JFrame窗口分成30个正方形(不需要单独绘制),并能够访问每个正方形(可能将它们放入数组/数组列表/堆栈/向量等)。如果不写30次drawRect(x,y,宽度,高度),这是可能的吗?提前谢谢 使用布局管理器 为什么不使用JTable来代替它呢?您可以将组件保存在ArrayList中,并使用GridLayout 以及以下代码片段: getContentPane.setLayout(new GridLayout(x,y)); 其中x和y分别表示行数和列数。 之

我基本上想把一个300×300的JFrame窗口分成30个正方形(不需要单独绘制),并能够访问每个正方形(可能将它们放入数组/数组列表/堆栈/向量等)。如果不写30次drawRect(x,y,宽度,高度),这是可能的吗?提前谢谢

使用布局管理器


为什么不使用JTable来代替它呢?

您可以将组件保存在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 );
    }
}
导入java.awt.Color;
导入java.awt.Container;
导入java.awt.GridLayout;
导入java.awt.Window;
导入java.util.ArrayList;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类MyFrame扩展了JFrame
{
公共静态void main(字符串[]args)
{
MyFrame MyFrame=新建MyFrame();
myframe.setSize(300300);
myframe.setresizeable(false);
myframe.setLocationRelativeTo(空);
setLayout(新的GridLayout(3,3));
Container=myframe.getContentPane();
ArrayList组件=新的ArrayList();
JPanel temp=null;
//填充Arraylist对象。
对于(int i=0;i<9;i++)
{
temp=新的JPanel();
温度设定值(100100);
组件。添加(温度);
容器。添加(温度);
}
myframe.pack();
myframe.setVisible(true);
//通过索引访问组件。
组件。获取(5)。挫折背景(颜色:蓝色);
组件。获取(8)。挫折背景(颜色。绿色);
}
}

除了对每个方块都有对象引用(这样您就可以将它们放入一些集合结构中),您还想对方框做什么?他们是否有需要绘制到画布上的内容?它们是
JComponent
s吗?是否要使用类似于
JList
JTable
渲染方式的飞锤模式?请按照SuperDeclader建议使用布局管理器使用gridlayout。