如果程序中的数据发生变化,如何更新JFrame
显示?
一点背景。我目前正在进行某种蚁群模拟(它不是一个学校项目。嗯......不是我的学校; p(我也没有帮助过某个人,我' m)只是为了好玩而这样做))
在那次模拟中,我尝试显示模拟当前状态的地图,显示食物,蚂蚁,殖民地,岩石的位置......
我目前正在做的事情:我有两张地图"。每个都是一个二维数组。第一个包含每个元素的ID,另一个包含向用户显示的图标(在数组/映射的右侧位置),并且仅显示该情况的最重要对象(例如,如果蚂蚁与殖民地在同一个广场上,只有殖民地会出现。)
每张地图背后的数据都很好,并且包含了我想要的内容。
问题是,一旦模拟开始运行,我的帧仍然停留在第0周。
所以(对于上面没有读过的那个),如何更改地图数据时更新帧显示?
我当前代码的一些部分: 编辑:可编辑版本,以便以定期更改值的廉价方式
我的"主要"
public class FInit {
public static String[][] textGrid=
{{"+", "-", "-", "-", "-", "-", "+"},
{"|", " ", " ", " ", " ", "#", "|"},
{"|", " ", " ", " ", " ", " ", "|"},
{"|", " ", " ", " ", "O", " ", "|"},
{"|", " ", " ", " ", " ", " ", "|"},
{"|", " ", "#", "O", "©", "O", "|"},
{"+", "-", "-", "-", "-", "-", "+"}};
public static void main(String[] args) throws InterruptedException{
FFenetre fenetre = new FFenetre();
fenetre.fMapWindows(textGrid.length, textGrid[0].length);
while(true){
fenetre.repaint();
Thread.sleep(500);
if(textGrid[5][4].equals("©")) textGrid[5][4]=" ";
else textGrid[5][4]="©";
}
}
}
另一个相关位:
public class FFenetre extends JPanel {
public FFenetre test;
public void fMapWindows(int x, int y){
JFrame frame = new JFrame("Carte");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize((x+1)*20, (y+2)*20+5);
frame.setLocationRelativeTo(null);
FFenetre test = new FFenetre();
frame.add(test);
frame.setVisible(true);
//frame.setContentPane(new FGraphiqueMapIcones());
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Font font = new Font("Monospaced", Font.PLAIN, 20);
g.setFont(font);
for(int a=0; a<FInit.textGrid.length; a++){
for(int b=0; b<FInit.textGrid[0].length; b++){
g.drawString(FInit.textGrid[b][a], (a)*20+5, (b+1)*20);
}
}
}
}
在@Override
部分之后,我真的不知道我在做什么,因为我试图实现不同人的解决方案,但没有真正能够处理我想要的东西(不是按钮也不是鼠标)运动)