2016-04-22 3 views
1
public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 

     ImageIcon grassIcon = new ImageIcon("C:\\Users\\Pamvotis\\Desktop\\Project\\img\\icon.png"); 
     JLabel labels = new JLabel(); 

     for (int row = 0; row < 10; row++) { 
      for (int col = 0; col < 6; col++) { 
       gbc.gridx = col; 
       gbc.gridy = row; 

       CellPane cellPane = new CellPane(); 
       Border border = null; 
       if (row < 9) { 
        if (col < 5) { 
         border = new MatteBorder(1, 1, 0, 0, Color.BLACK); 
        } else { 
         border = new MatteBorder(1, 1, 0, 1, Color.BLACK); 
        } 
       } else { 
        if (col < 5) { 
         border = new MatteBorder(1, 1, 1, 0, Color.BLACK); 
        } else { 
         border = new MatteBorder(1, 1, 1, 1, Color.BLACK); 
        } 
       } 
       cellPane.setBorder(border); 
       if ((row==0)&&((col==2)||(col==3))) { 
        cellPane.setBackground(Color.RED); 
       } else if ((row==9)&&((col==2)||(col==3))) { 
        cellPane.setBackground(Color.WHITE); 
        labels = new JLabel(grassIcon);add(labels); 
       } else { 
        cellPane.setBackground(Color.GREEN); 
       } 

       add(cellPane, gbc); 
      } 
     } 
    } 

Итак, у меня есть этот код, но проблема заключается в том, что каждый раз, когда я запускаю программу, метки с изображениями помещаются в первую строку после сетки. Это происходит с каждой другой попыткой, которую я сделал, чтобы метки всегда отображались в первой строке сетки или на первой строке после сетки. Кто-нибудь может мне с этим помочь?Как добавить ярлыки в определенные ячейки панели GridLayout в Java?

ответ

1
add(labels); 

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

Если вы хотите управлять расположением компонентов, вам необходимо указать ограничение с каждым оператором add (...).

Edit:

else if ((row==9)&&((col==2)||(col==3))) {cellPane.setBackground(Color.WHITE);labels = new JLabel(grassIcon);add(labels);} 

Я предполагаю, что вы хотите:

else if ((row==9)&&((col==2)||(col==3))) 
{ 
    cellPane.setBackground(Color.WHITE); 
    labels = new JLabel(grassIcon); 
    //add(labels); 
    cellPane.add(labels); 
} 
else 

Теперь вам просто нужно, чтобы убедиться, что "cellPane" использует менеджер компоновки.

+0

так как именно я должен указать ограничение в инструкции add (...)? извините, я очень новичок в java – helpme

+0

@helpme, я не знаю, каково ваше требование. Я понятия не имею, почему вы пытаетесь добавить два компонента в сетку в одном цикле. Может быть, вы хотите добавить ярлык в CellPane, а не в панель? Опять же, я понятия не имею, что такое CellPane или какой менеджер макетов вы используете на панели сот. 'Я очень новичок в java'. Содержите ссылку на учебник [Swing tutorial] (http://docs.oracle.com/javase/tutorial/uiswing/TOC.html). В нем есть рабочие примеры всех основ Swing. В разделе «Менеджеры макетов» есть раздел с рабочими примерами, если мое простое предложение не поможет вам. – camickr

+0

Кроме того, не записывайте блоки кода в одну строку. Каждый оператор Java должен быть в своей собственной строке, чтобы сделать его более читаемым и простым в обслуживании. См. Править. – camickr

Смежные вопросы