数据更改时JFrame更新

时间:2016-01-27 12:26:03

标签: java swing jframe

如果程序中的数据发生变化,如何更新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部分之后,我真的不知道我在做什么,因为我试图实现不同人的解决方案,但没有真正能够处理我想要的东西(不是按钮也不是鼠标)运动)

0 个答案:

没有答案