Рисовать несколько квадратов в JFrame Java и получить доступ к каждому из них?
Я в основном хочу разделить окно 300 на 300 JFrame на 30 квадратов (не рисуя их все отдельно) и иметь возможность доступа к каждому из квадратов (возможно, поместить их в массив /arraylist/stack/vector/ и т. Д.). Возможно ли это без записи drawRect(x, y, width, height) 30 раз? Заранее спасибо.
3 ответа
Решение
Вы можете хранить свои компоненты в 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 );
}
}
Использовать менеджер макетов
http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html