2014-10-11 116 views
0

我创建了一个JPanel网格,现在我想添加图像片阵列到网格,最后一行中的循环为 我有错误。添加JLabel数组到JPanel

public static final int WIDTH = 1024; 
public static final int HEIGHT = 640; 
private static final int GRID_ROWS = 20; 
private static final int GRID_COLS = 20; 
private static final int GAP = 1; 
private static final Dimension LAYERED_PANE_SIZE = new Dimension(WIDTH, HEIGHT); 
private static final Dimension LABEL_SIZE = new Dimension(60, 40); 
private GridLayout gridlayout = new GridLayout(GRID_ROWS, GRID_COLS, GAP, GAP); 
private JPanel backingPanel = new JPanel(gridlayout); 
private JPanel[][] panelGrid = new JPanel[GRID_ROWS][GRID_COLS]; 
private JLabel redLabel = new JLabel("Red", SwingConstants.CENTER); 
private JLabel blueLabel = new JLabel("Blue", SwingConstants.CENTER); 

// code in constructor 

backingPanel.setSize(LAYERED_PANE_SIZE); 
backingPanel.setLocation(2 * GAP, 2 * GAP); 
backingPanel.setBackground(Color.black); 
for (int row = 0; row < GRID_ROWS; row++) { 
    for (int col = 0; col < GRID_COLS; col++) { 
     panelGrid[row][col] = new JPanel(new GridBagLayout()); 
     backingPanel.add(panelGrid[row][col]); 
    } 
} 
setLayout(new GridLayout(GRID_ROWS, GRID_COLS)); 
BufferedImage bi = null; 
try { 
    bi = ImageIO.read(new File("assets/image.jpg")); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
for (int r = 0; r < GRID_ROWS; r++) { 
    for (int c = 0; c < GRID_COLS; c++) { 
     int w = bi.getWidth()/GRID_ROWS; 
     int h = bi.getHeight()/GRID_COLS; 
     BufferedImage b = bi.getSubimage(c * w, r * h, w, h); 
     list.add(new JLabel(new ImageIcon(b))); 
     panelGrid[r][c] = new JPanel(new GridBagLayout()); 
     backingPanel.add(panelGrid[r][c]); 
     panelGrid[r][c].add(list.get(r)); 
    } 
} 
+0

类型的表达式必须是一个数组类型,但它决心列出,这是一个arrray私人最终列表 list = new ArrayList (); – 2014-10-11 12:34:26

回答

0

由于listList一个实例,Java是不是C++,你不能指定喜欢operator[]方法。您需要使用list.get(),像这样:

panelGrid[r][c].add(list.get(r)); 

此外,你应该使用GridBagLayoutGridBagConstraints。因此,呼吁

setLayout(new GridBagLayout()); 
GridBagConstraints gbc = new GridBagConstraints(); 

而改变,你的面板添加到该行:

panelGrid[r][c] = new JPanel(new GridBagLayout()); 
panelGrid[r][c].add(list.get(r)); 
gbc.gridx = r; gbc.gridy = c; 
backingPanel.add(panelGrid[r][c], gbc); 
+0

Dosent的工作,无错误,但在运行我没有任何网格 – 2014-10-11 12:55:10

+0

@ArtinRadpour'for''循环之后'panelGrid'包含什么? – msrd0 2014-10-11 14:21:17

+0

我在代码中改变了一些东西,只是在网格中有第一个切片。 'panelGrid [r] [c] = new JPanel(new GridBagLayout()); panelGrid [r] [c] .add(list.get(r)); backingPanel.add(panelGrid [r] [c]);' – 2014-10-11 15:20:46