Заголовок говорит все, мне нужно обновить текст JLabel, и, конечно, это творит чудеса с помощью основных методов, но моя «игра» из этого:Обновите текст JLabel без изменения всего остального
к этому
мне нужно, чтобы остановить это происходит, мне нужно обновить текст метки, который говорит «а» на себе конд картина каждый второй, мой лучший выбор был перекрывая метод рисования и рисования строку с этим кодом:
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);
}
}
Я надеюсь, что эта информация может быть полезной.
Можете ли вы перевести SSCCE на английский язык? – tbodt
panelConstruccion = constructionPanel panelDatosCiudad = cityDataPanel panelMapa = mapPanel panelEstado = cityStatusPanel Administrador = администратор, объект, который обрабатывает некоторые функции, такие как извлечение входов и выходов города, такие как налоговый орган. oh, administratorar = adminate. = город Сьюдад, там у вас есть все конструкции накопившихся в красивый большой ArrayList арчи = целое число переменных, сколько денег вы получили в вашем городе Puntos Belleza = «точка красоты», только требование чтобы выиграть игру действительно habitantes = жители – krieg
Не вызывайте 'repaint' или любой метод, который может вызвать вызов' repaint' из любого метода рисования. – MadProgrammer