Путаница с вложенными JPanels и пробелами между ними - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь создать JScrollPane, который содержит галерею изображений и JFreeCharts. Пока я просто использую цветные прямоугольники для тестирования.

У меня есть две проблемы, первая из которых заключается в том, что я не совсем понимаю свой собственный код (он в некоторой степени делает то, что мне нужно, но я Я не уверен, почему).

Мое основное недоразумение заключается в том, и, пожалуйста, посмотрите код ниже, необходимость в панели, которая содержит мои панели с изображениями:

panel.add(panelHolder[m][n]); 

Я думаю, что я мог бы просто добавить панели прямо к scrollPanel вместо

scrollPanel.add(panelHolder[m][n])

Но когда я это сделаю, scrollPanel будет казаться пустым.

Моя вторая проблема видна на следующем снимке экрана: промежутки между изображениями, и их размеры, кажется, меняются, когда я играю с размером прямоугольника? Я пытался дать panel a GridLayout, чтобы избежать наценки, но это ничего не меняет.

enter image description here

    //Load Images
    Image img = ImageIO.read(new File("H:\\testimg.PNG"));
    BufferedImage bimg = toBufferedImage(img);      
    ImageIcon icon1 = new ImageIcon(bimg);
    JLabel iconholder = new JLabel(icon1);

    Image img1 = ImageIO.read(new File("H:\\testimg2.PNG"));
    BufferedImage bimg1 = toBufferedImage(img1);        
    ImageIcon icon2 = new ImageIcon(bimg1);
    JLabel iconholder1 = new JLabel(icon2);

    Image img2 = ImageIO.read(new File("H:\\testimg3.PNG"));
    BufferedImage bimg2 = toBufferedImage(img2);        
    ImageIcon icon3 = new ImageIcon(bimg2);
    JLabel iconholder2 = new JLabel(icon3);

    //Create Tab        
    int i=4;
    int j=2;
    JPanel[][] panelHolder = new JPanel[i][j];
    GridLayout glay = new GridLayout(i,j);
    glay.setVgap(0);
    glay.setHgap(0);

    JPanel panel = new JPanel(glay);
    JScrollPane scrollPanel = new JScrollPane(panel);

    //Put image holding panels in scrollPanel
    for(int m = 0; m < i; m++) {
       for(int n = 0; n < j; n++) {
          panelHolder[m][n] = new JPanel();
          panel.add(panelHolder[m][n]);
       }
    }


    scrollPanel.setPreferredSize(new Dimension(410, 50));
    scrollPanel.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
    scrollPanel .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scrollPanel.getVerticalScrollBar().setUnitIncrement(16);  

    //Put Images in
    panelHolder[0][0].add(iconholder);
    panelHolder[3][0].add(iconholder1);
    panelHolder[1][1].add(iconholder2);
...