2013-12-09 3 views
4

Заголовок говорит все, мне нужно обновить текст JLabel, и, конечно, это творит чудеса с помощью основных методов, но моя «игра» из этого:Обновите текст JLabel без изменения всего остального

no text update yet

к этому

text update

мне нужно, чтобы остановить это происходит, мне нужно обновить текст метки, который говорит «а» на себе конд картина каждый второй, мой лучший выбор был перекрывая метод рисования и рисования строку с этим кодом:

public void paint(Graphics g){ 

     super.paint(g); 


     g.setColor(Color.BLACK); 

     g.drawString("Arca: " + administrador.getCiudad().getArca() 
       + "         " 
       + " Puntos de Belleza: " + administrador.getCiudad().getPuntosBelleza() + 
       "         " + 
       " Habitantes: " + 
       administrador.getCiudad().getCantidadHabitantes() + "/" 
       + administrador.getCiudad().getCantidadHabitantesDisponibles(), 400, 45); 

      repaint(); 
} 

но строка мелькали безостановочно, и теперь я пытаюсь обновить текст метки внутри панели, но то происходит то же самое, что показано на второй картинке.

Мой вопрос: как я могу обновить текст ярлыка без его рисования всего остального?

Обратите внимание, что с использованием JLabel (вместо drawstring) я не использую код, указанный выше, я не использую его, просто добавляя его в панель.

Если Вы хотели бы SSCCE относительно этого все, вы могли бы использовать это:

public class GUIJuego extends JFrame{ 

private JLabel labelConstrucciones = new JLabel("Construcciones"); 
private JLabel labelEstados = new JLabel(" "); 

public GUIJuego(){ 

    JPanel panelConstruccion = new JPanel(new GridLayout(9,1)); 
    JPanel panelDatosCiudad = new JPanel(new GridLayout(1,2)); 
    JPanel panelMapa = new JPanel(new GridLayout(25,25)); 
    JPanel panelEstado = new JPanel(new FlowLayout()); 

    administrador = new Administrador(new Ciudad(), 0, new Dificultad(this.getMultiplicadorDificultad()), new Constructora()); 

    administrador.administrar(this); 

    panelDatosCiudad.add(panelEstado); 
    panelEstado.add(labelEstados); 

    Timer timer = new Timer(10, new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      labelEstados.setText("Arca: " + administrador.getCiudad().getArca() 
        + "         " 
        + " Puntos de Belleza: " + administrador.getCiudad().getPuntosBelleza() + 
        "         " + 
        " Habitantes: " + 
        administrador.getCiudad().getCantidadHabitantes() + "/" 
        + administrador.getCiudad().getCantidadHabitantesDisponibles()); 
     } 

    }); 

    timer.start(); 
    } 
} 

// Timer which updates the JLabel's values along with its class 

public class Administrador { 

private Ciudad ciudad; 
private int contadorExplosion; 
private Dificultad dificultad; 
private Constructora constructora; 
private TimerTask taskJuego; 

public void administrar(GUIJuego juego){ 

    Timer timer = new Timer("Juego"); 

    taskJuego = new TimerTask(){ 
     public void run() { 

      if((getCiudad().getArca() < 100000 && getCiudad().getArca() > 0) && getCiudad().getPuntosBelleza() < 1000 && getCiudad().getCantidadHabitantes() < 1000){ 

       getEgresosIngresos(); 
       tryExplotar(); 

      } else if(getCiudad().getArca() >= 100000 || getCiudad().getPuntosBelleza() >= 1000 || getCiudad().getCantidadHabitantes() >= 1000){ 

       this.cancel(); 
       JOptionPane.showMessageDialog(null, "¡Ganaste!"); 

      } else if(getCiudad().getArca() <= -1000) { 

       this.cancel(); 
       JOptionPane.showMessageDialog(null, "¡Perdiste!"); 

      } 
     } 
    }; 

    timer.scheduleAtFixedRate(taskJuego, 0, 1000); 


} 
} 

Я надеюсь, что эта информация может быть полезной.

+0

Можете ли вы перевести SSCCE на английский язык? – tbodt

+0

panelConstruccion = constructionPanel panelDatosCiudad = cityDataPanel panelMapa = mapPanel panelEstado = cityStatusPanel Administrador = администратор, объект, который обрабатывает некоторые функции, такие как извлечение входов и выходов города, такие как налоговый орган. oh, administratorar = adminate. = город Сьюдад, там у вас есть все конструкции накопившихся в красивый большой ArrayList арчи = целое число переменных, сколько денег вы получили в вашем городе Puntos Belleza = «точка красоты», только требование чтобы выиграть игру действительно habitantes = жители – krieg

+0

Не вызывайте 'repaint' или любой метод, который может вызвать вызов' repaint' из любого метода рисования. – MadProgrammer

ответ

0

Попытка установить LayoutManager на нуль для компонента, который вы добавляете JLabel. Кроме того, эти изменения должны быть сделаны на EDT. Как прокомментировал MadProgrammer, вместо этого используйте javax.swing.Timer.

0

попробовать это

label.setText("Value"); 

этот метод работы для значения метки обновления

благодаря

Смежные вопросы