Рисовать несколько квадратов в JFrame Java и получить доступ к каждому из них? - PullRequest
2 голосов
/ 06 февраля 2012

Я в основном хочу разделить окно 300 на 300 JFrame на 30 квадратов (не рисуя их все отдельно) и иметь возможность доступа к каждому из квадратов (возможно, поместить их в массив / arraylist / stack / vector / etc),Возможно ли это без записи drawRect (x, y, width, height) 30 раз?Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Почему бы не пойти на JTable вместо этого?

2 голосов
/ 06 февраля 2012

Вы можете хранить свои компоненты в 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 );
    }
}
2 голосов
/ 06 февраля 2012

использовать менеджер макетов

http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

...