2015-04-14 3 views
0

Я пытаюсь удалить несколько компонентов в JPanel с использованием GridBagLayoutJava GridBayLayout замещающие компоненты

javax.swing.SwingUtilities.invokeLater(new Runnable(){ 
    public void run(){ 
     createAndShowGUI(); 

     GamePanel gamePanel = new GamePanel(frame.getContentPane()); 
     gamePanel.delBlock(0, 0); 
     gamePanel.delBlock(0, 1); 

     frame.setContentPane(gamePanel); 

    } 
}); 

Это метод для удаления блока

public void delBlock(int x, int y){ 

    int location = x * row + y; 
    this.remove(location); 

    this.revalidate(); 
    this.repaint(); 

} 

Как вы можете увидеть 2 блоков должны быть рядом друг с другом, но это то, что я получаю в результате.

enter image description here

+0

Вы не видите изображение по ссылке – MadProgrammer

ответ

2
gamePanel.delBlock(0, 0); 
    gamePanel.delBlock(0, 1); 

Прежде всего удалить компонент в месте 0. Тогда все компоненты сдвига 1 позиции в контейнере.

Затем вы удаляете компонент в месте 1. Однако этот компонент, который был в местоположении 2, перед удалением первого компонента.

Try:

gamePanel.delBlock(0, 1); 
    gamePanel.delBlock(0, 0); 

в обратном порядке, в котором вы удалите компоненты.

Это всегда удаляет компоненты с конца контейнера.

Как вы можете видеть, 2 блоки должны быть рядом друг с другом

Я не могу сказать, если вы имеете в виду «рядом» друг с другом в вертикальном направлении или горизонтальном смысле.

Учитывая, что два компонента были удалены из первого столбца, кажется, что вы строите свою сетку в порядке столбцов. То есть вы добавляете все компоненты для столбца 1, а затем столбец 2, а затем столбец 3 и т. Д.

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

+0

Спасибо, вы ответили на мой вопрос! Однако есть ли другой способ, который я могу удалить из нескольких компонентов, не беспокоясь об изменении порядка? –

+0

@AlanYu, рад, что ответ помог. Не забудьте «принять» ответ, чтобы люди знали, что проблема решена. Вы создаете создать «Список», содержащий значения Integer для удаляемого компонента. Затем вы можете отсортировать этот список в обратном порядке. Наконец, вы перебираете список и удаляете компоненты. Это немного больше работы, но результатом является то, что вам не нужно беспокоиться о том, как вы добавляете значения Integer в список, потому что сортировка будет убедиться, что они удалены в правильном порядке. – camickr

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