Как динамически изменить JPanel при нажатии кнопки?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как динамически изменить JPanel при нажатии кнопки?

Сообщение Anonymous »

РЕДАКТИРОВАТЬ
Я хочу создать программу, которая позволит мне случайным образом создавать панели, у меня есть реализация MVC.
Вот сценарий:
Когда я нажимаю кнопку Далее, я хочу обновить количество панелей (Это список панелей в PanelContainer), но графический интерфейс не будет. Когда я использую отладчик, он выглядит правильно. Я очищаю PanelsContainer и ValueList и заполняю их новыми, но в графическом интерфейсе старые панели остаются, а новые просто добавляются. Итак, я обнаружил, что у меня от 20 до N панелей.
Смотрите изображение
Я думаю, проблема в Test()(GameView)
старая версия была такой:
public void test(int number, List panels){
myListFigures.clear();
nbpanels = number;
myListTmp = panels;

panelsContrainer.removeAll();
panelsContrainer.revalidate();
setWork(nbpanels,myListTmp);
panelsContrainer.revalidate();
}

Мой код:
GameModel: класс, в котором создается количество панелей и их значения.
public class GameModel {

private boolean isDragging;
private int numberToAcheve;
private int numberOfCut;
private int numberOfPanels;
private int sum;
private List myListRandomValue = new ArrayList();
private List myListPanelsValue = new ArrayList();

GameModel(){

this.isDragging = false;
this.numberToAcheve = 0;
this.numberOfCut= 0;
this.numberOfPanels = 0;
this.sum = 0;
this.allWork();
}

public void allWork(){
int maximum = 6;
int minimum = 3;
Random rn = new Random();
StringBuilder sb = new StringBuilder();
int randomNumber = 0;
int range = 0;

// decoupage()
range = maximum - minimum + 1;
numberOfCut = rn.nextInt(range) + minimum;

// NumberAttribution()
for(int instance = 0; instance < numberOfCut;instance++){
if (Math.random() > 0.5) {
randomNumber = 1 + (int) (Math.random() * 9);
} else {
randomNumber = 10 + (int) (Math.random() * 90);
}
myListRandomValue.add(randomNumber);
}

// panelConcat()
for(int i=0; i < myListRandomValue.size(); i++){
sb.append(myListRandomValue.get(i));
}

for(int j=0; j< sb.length(); j++){
myListPanelsValue.add(Integer.parseInt(sb.substring(j,j+1)));
}
numberOfPanels = myListPanelsValue.size();
}

public int numberToAcheve(){
for(int i = 0; i < myListPanelsValue.size(); i++)
{
sum += myListPanelsValue.get(i);
}
return sum;
}

public int getNumberToAcheve() {
return numberToAcheve;
}

public int getSum() {
return sum;
}

public int getNumberOfPanels() {
return numberOfPanels;
}

public List getMyListPanelsValue() {
return myListPanelsValue;
}
}

GameView: класс содержит все компоненты и добавляет панели со значениями с помощью setWork() в графический интерфейс
public class GameView {

public List myListTmp = new ArrayList();
public int nbpanels = 0;

public List myListFigures = new ArrayList();
private JPanel panelsContrainer = new JPanel(new GridLayout(1,0));
private JPanel controlsContrainer = new JPanel();

private final JFrame frame;
private JButton next = new JButton("Next");

public GameView(){

frame = new JFrame("");
frame.getContentPane().setLayout(new BorderLayout());

controlsContrainer.add(next);

frame.getContentPane().add(panelsContrainer, BorderLayout.NORTH);
frame.getContentPane().add(controlsContrainer, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,300);
frame.setVisible(true);
}

public JButton getNext() {
return next;
}
public void setWork(int numberOfPanels, List panelsValues){
for(int instance = 0; instance < numberOfPanels; instance++){
myListFigures.add(new Figure(panelsValues.get(instance)));
panelsContrainer.add(myListFigures.get(instance));
}
}

public void test(int number, List panels){
myListFigures.clear();
nbpanels = number;
myListTmp = panels;

}

}

Игровой контроллер:
public class GameController {

private GameModel model;
private GameView view;

public GameController(GameModel model, GameView view) {
this.model = model;
this.view = view;
this.view.setWork(this.model.getNumberOfPanels(),this.model.getMyListPanelsValue());

}

public void contol(){
view.getNext().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
action();
}
});

}

private void action(){
model.allWork();
view.test(model.getNumberOfPanels(),model.getMyListPanelsValue());
}

}


Подробнее здесь: https://stackoverflow.com/questions/331 ... is-clicked
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»