簡體   English   中英

將JLabel數組添加到JPanel

[英]Add JLabel Array to JPanel

我創建了一個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));
    }
}

由於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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM