РЕДАКТИРОВАТЬ
Я хочу создать программу, которая позволит мне случайным образом создавать панели, у меня есть реализация 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
Как динамически изменить JPanel при нажатии кнопки? ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1761965366
Anonymous
[b]РЕДАКТИРОВАТЬ[/b]
Я хочу создать программу, которая позволит мне случайным образом создавать панели, у меня есть реализация MVC.
[b]Вот сценарий:[/b]
Когда я нажимаю кнопку Далее, я хочу обновить количество панелей ([b]Это список панелей в[/b] PanelContainer), но графический интерфейс не будет. Когда я использую отладчик, он выглядит правильно. Я очищаю PanelsContainer и ValueList и заполняю их новыми, но в графическом интерфейсе старые панели остаются, а новые просто добавляются. Итак, я обнаружил, что у меня от 20 до N панелей.
[b]Смотрите изображение[/b]
Я думаю, проблема в Test()(GameView)
старая версия была такой:
public void test(int number, List panels){
myListFigures.clear();
nbpanels = number;
myListTmp = panels;
panelsContrainer.removeAll();
panelsContrainer.revalidate();
setWork(nbpanels,myListTmp);
panelsContrainer.revalidate();
}
[b]Мой код:[/b]
[b]GameModel[/b]: класс, в котором создается количество панелей и их значения.
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;
}
}
[b]GameView[/b]: класс содержит все компоненты и добавляет панели со значениями с помощью 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());
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/33176315/how-to-change-a-jpanel-dynamically-when-the-button-is-clicked[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия