removePanel ()
используется для получения компонентов в mainPanel
с использованием getComponent ()
и расширенного цикла. Затем проверьте, какие компоненты видимы, и вызовите removeLayoutComponent ()
для этого компонента.
ЭТО МЕТОД УДАЛЕНИЯ ПАНЕЛИ
public void removeJPanel () {
for (Component comp : mainPanel.getComponent (number)) {
if (comp.isVisible () == true) {
card.removeLayoutComponent (comp);
number++;
} else {
System.out.print("It didn't work!");
}
}
}
mainPanel
использует макет карты, затем JPanels из массива panel
добавляется в mainPanel
.
Это код, где я создаю главную панель и добавляю JPANELS в нее
public TicTacToeFrame () {
if (badge.num == 0) {
playerX = JOptionPane.showInputDialog ("Enter Player X name: ");
playerO = JOptionPane.showInputDialog ("Enter Player O name: ");
badge.setLabel (playerX);
}
mainPanel = new JPanel ();//THIS IS WHERE I CREATE MAINPANEL
mainPanel.setLayout (card);//THIS IS WHERE CARDLAYOUT IS SET AS LAYOUT MANAGER
panels [0] = new JPanel (new GridLayout (3, 3, 0, 0));
panels [1] = new JPanel (new GridLayout (3, 3, 0, 0));
panels [2] = new JPanel (new GridLayout (3, 3, 0, 0));
JPanelArray ();
panels [0].setBorder (new LineBorder (Color.red, 1));
panels [1].setBorder (new LineBorder (Color.red, 1));
panels [2].setBorder (new LineBorder (Color.red, 1));
mainPanel.add (panels [0], "one");//JPANELS FROM THE PANEL ARRAY ARE ADDED TO THE MAINPANEL
mainPanel.add (panels [1], "two");
mainPanel.add (panels [2], "three");
badge.jlblStatus.setBorder (new LineBorder (Color.yellow, 1));
add (mainPanel, BorderLayout.CENTER);
add (badge.jlblStatus, BorderLayout.SOUTH);
}
Ожидаемый результат: игрок нажал кнопку JDialog и выполнил removePanel ()
. Вместо этого произошло то, что текущая панель не была удалена и произошла ошибка компиляции for-each not applicable to expression type
.
ЭТО ТАМ, ГДЕ REMOVEJPANEL () ВЫЗВАН
public void replayDialog () {
int response = JOptionPane.showConfirmDialog (this, "Do you want to play again ?", "TicTacToe", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (response == JOptionPane.YES_OPTION) {
frame.removeJPanel ();
frame.newCells = null;
label.num++;
frame.JPanelArray ();
} else if (response == JOptionPane.NO_OPTION) {
frame.gameOver = true;
}
}
Ошибка компиляции
.\TicTacToeFrame.java:139: error: for-each not applicable to expression type
for (Component comp : mainPanel.getComponent (number)) {
^
required: array or java.lang.Iterable
found: Component
1 error
Я обнаружил, что foreach не применим к типу выражения на этом сайте, но это нене отвечал моим потребностям, так как я изо всех сил пытался понять, что было на странице, так как я все еще новичок в Java.