Witam, napisałem program na zaliczenie. Symulacja prostej gry polegającej na przemieszczaniu się dwóch rodzajów stworków między pokojami przez wyznaczoną ilość rund. ( Jako, że deadline mam dopiero za tydzień pokusiłem się o zrobienie graficznego interface'u i ku mojemu zaskoczeniu (jak na debiut) poszło mi całkiem nieźle. )
Jednak mam pewien problem, ponieważ Tabela, która odzwierciedla siatkę pokoi (GridWorld) nie odświeża wyników co każdą rundę, ale tylko po wykonaniu wszystkich pętli (każda trwa sekundę). Dodatkowo, nawet po wykonaniu pętli odświeżenie wyników w tabeli następuje np. dopiero po zmianie wielkości okna. Proszę o pomoc i cenne wskazówki. Aplikacja wygląda tak:
//stworzenie przycisku i tabeli w konstruktorze
btnStartGame = new JButton("Start Game");
btnStartGame.setBounds(682, 87, 132, 24);
frame.getContentPane().add(btnStartGame);
btnStartGame.addActionListener(this);
table_1 = new JTable(GridWorld,columnNames);
table_1.setBackground(new Color(255, 255, 255));
table_1.setBounds(35, 135, 1111, 353);
frame.getContentPane().add(table_1);
@Override
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
if(source == btnRandomNewWorld){
RandomnewWorld();
}else if(source == btnStartGame){
double d = Double.parseDouble(textField.getText());
int turns = (int)d;
for (int i=0;i<turns;i++){
/* w tym miejscu pętla wykonuje się prawidłowo,
jednak nie odświeża na bieżąco wyników w tabeli,
które są zmieniane w funkcji singleTurn().
Pole textField podobnie jak tabela
także zmieniane jest na końcu.*/
singleTurn(i);
}
lblResults.setText(boardgame.getResults());
}
}
public void singleTurn(int i) {
//set the number of current turn
lblTurnNr.setText("Turn nr: "+(i+1));
frame.getContentPane().add(lblTurnNr);
//perform a single turn in GridWord class
boardgame.act(i);
//complete the table_1
String[][] newTable = boardgame.printTheTable();
for(int x=0;x<20;x++)
for(int y=0;y<20;y++)
GridWorld[x][y]=newTable[x][y];
table_1 = new JTable(GridWorld,columnNames);
//take a pause
double a=System.currentTimeMillis(),b=a+1000;
while(a<b){
a=System.currentTimeMillis();
}
}
}