Это мой первый вопрос, поэтому, пожалуйста, несите меня :) Im работает над динамической частью графического интерфейса, и по какой-то причине его дразнит меня. Класс открывается в новом окне после входа в систему. Я хочу, чтобы новый JPanel был создан и добавлен в «контейнер» каждый раз при нажатии кнопки «добавить игрока». Он должен помещать их ниже eachother, но все, что он делает, это добавить одну кнопку при первом щелчке, а затем остальные клики впоследствии ничего не делают.Динамическое добавление JPanels к JFrame
Любая помощь приветствуется :)
package Gui;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
//import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class TeamManagerGUI extends JFrame implements ActionListener
{
// private JLabel pNameLabel = new JLabel("Player Name: "),
// pSchoolLabel = new JLabel("School: ");
// private JTextField pNameField = new JTextField(),
// pSchoolField = new JTextField();
private JButton addButton = new JButton("Add Player"),
removeButton = new JButton("Remove player");
private JPanel container = new JPanel(),
playerContainer = new JPanel();
int frameCounter = 1;
public TeamManagerGUI()
{
super("Team Manager User Interface");
setSize(1200,800);
setDefaultCloseOperation(EXIT_ON_CLOSE);
container.setLayout(new GridBagLayout());
playerContainer.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(3,3,3,3);
addButton.addActionListener(this);
container.add(addButton,gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.insets = new Insets(3,3,3,3);
container.add(removeButton,gbc);
this.add(container);
}
public void playerFrame()
{
GridBagConstraints gbc = new GridBagConstraints();
playerFrameArr.add(new JPanel());
gbc.gridx = 0;
gbc.gridy = 0;
playerContainer.add(new JButton("LABEL"),gbc);
gbc.gridx = 1;
gbc.gridy = 0;
playerContainer.add(new JButton("BUTTON"),gbc);
gbc.gridx = 0;
gbc.gridy = frameCounter+1;
container.add(playerContainer,gbc);
System.out.println(frameCounter);
frameCounter++;
}
public void addPlayerRow()
{
playerFrame();
container.revalidate();
container.repaint();
}
public void removePlayerRow()
{
//Not yet implemented
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == addButton)
{
addPlayerRow();
}
if(ae.getSource() == removeButton)
{
//Not yet implemented
}
}
}
Теперь, когда они добавляют хорошо, как я могу удалить их по одному за раз со дна? У них нет настоящих имен, или я чего-то не хватает? – H4rdstyler
Ну, у вас есть список 'playerFrameArr', не так ли? Вы можете извлечь последнюю запись из этого списка и удалить эту панель из своего контейнера. Должен работать нормально. Вы также можете использовать размер этого списка в качестве счетчика кадров. Это может пригодиться, если вы хотите добавить и удалить эти записи на постоянной основе. – Nitram