private void initGrid(){
        gridPanel = new JPanel(new GridLayout(4, 4,1,1));
        gridPanel.setBackground(Color.WHITE);
        gridPanel.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 10));
        gridPanel.add(new JLabel("Name:"));
        gridPanel.add(new JLabel(character.getName()));
        gridPanel.add(new JLabel("Corp:"));
        gridPanel.add(new JLabel(character.getCorpName()));
        gridPanel.add(new JLabel("Account paid:"));
        Account charAcc = MainFrame.dp.getAccountByCharacterID(character.getId());
        JLabel accExpires = new JLabel("Unknown account");
        if( charAcc != null ){
            accExpires.setText(charAcc.getExpires());
        }
        gridPanel.add(accExpires);
        gridPanel.add(new JLabel("Skills / clone:"));
        gridPanel.add((lbSP = new JLabel(Utils.formatInt(character.getSkillpoints())+" / "+Utils.formatInt(character.getCloneSkillpoints()))));
        if( character.getCloneSkillpoints() <= character.getSkillpoints() ){
            Msg.warningMsg(character.getName()+" needs clone upgrade!");
        }
        SkillInTraining currSkill = character.getSkillInTraining();
        if( currSkill == null ){
            character.setTraining(false);
        }
        if( character.isTraining() && currSkill != null ){
            gridPanel.add(new JLabel("Training:"));
            lbTaining = new JLabel(currSkill.getType().getName()+" lvl "+currSkill.getSkillLevel());
            lbTaining.setForeground(GREEN);
            gridPanel.add(lbTaining);
            gridPanel.add(new JLabel("Finishes:"));
            Date now = Utils.getNowUTC();
            Date fin = Utils.getUTC(currSkill.getEndTime());
            int s = (int)((fin.getTime()-now.getTime())/1000);
            gridPanel.add((lbFinishes = new JLabel(Utils.formatTime(s))));
            
            gridPanel.add(new JLabel("Queue:"));
            if( !character.getTrainingQueue().isEmpty() ){
                fin = Utils.getUTC(character.getTrainingQueue().get(character.getTrainingQueue().size()-1).getEndTime());
                s = (int)((fin.getTime()-now.getTime())/1000);
                lbQueue = new JLabel(Utils.formatTime(s));
                if(Utils.formatTime(s).startsWith("0")){
                    lbQueue.setForeground(RED);
                    Msg.infoMsg("Skill queue low: "+character.getName());
                }else{
                    lbQueue.setForeground(GREEN);
                }
                gridPanel.add(lbQueue);
                String tooltip = "<html>";
                for(int i=0;i<character.getTrainingQueue().size();i++){
                    fin = Utils.getUTC(character.getTrainingQueue().get(i).getEndTime());
                    if(fin.after(now)){
                        tooltip+=character.getTrainingQueue().get(i).getType().getName()+" "+character.getTrainingQueue().get(i).getSkillLevel()+"<br />";
                    }
                }
                    tooltip+="</html>";
                lbQueue.setToolTipText(tooltip);
            }else{
                lbQueue = new JLabel("Queue is empty.");
                gridPanel.add(lbQueue);
            }
        }else{
            gridPanel.add(new JLabel("Training:"));
            lbTaining = new JLabel("Inactive");
            lbTaining.setForeground(RED);
            gridPanel.add(lbTaining);
            gridPanel.add(new JLabel("Finishes:"));
            gridPanel.add((lbFinishes = new JLabel("-")));
            gridPanel.add(new JLabel("Queue:"));
            lbQueue = new JLabel("-");
            gridPanel.add(lbQueue);
        }
        gridPanel.add(new JLabel("Balance:"));
        gridPanel.add(lbISK);
        add(gridPanel,BorderLayout.CENTER);
    }