2012-02-06 41 views
2

我基本上想要将一个300×300的JFrame窗口分割成30个正方形(不需要单独绘制它们),并且能够访问每个正方形(可以将它们放入数组/列表/堆栈/矢量/等等)。这可能没有写drawRect(x,y,宽度,高度)30次?提前致谢。在Java JFrame中绘制多个方块并访问它们中的每一个?

+0

除了有每平方对象引用(所以你可以把它们变成一些馆藏结构),你想要什么用的箱子呢?他们是否有需要画到画布上的内容?他们是“JComponent”吗?你想使用类似'JList','JTable'的渲染方式吗? – 2012-02-06 17:07:31

回答

2

你可以保持在一个ArrayList您的组件,并得到使用网格布局 和下面的代码片段:

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

为什么不走了JTable中,而不是这个?

相关问题