Перерисовать Jlabel - Java
Формулировка задачи:
Доброго времени суток, сделал тестовый пример из JLabel подключил на него таймер который долбит и меняет переменную с текстом и картинкой, в трейсе переменная меняется а JLabel не обновляется, перекопал весь google и ничего (
private void weather()
{
System.out.println(data[0]);
ImageIcon icon = new ImageIcon("weather/"+data[0]+".png");
JLabel la = new JLabel();
la.setBounds(23, 340, 170, 170);
la.setOpaque(true);
la.setBackground(new Color(0,0,0,70));
la.setIcon(icon);
la.setText(data[1]);
la.setForeground(Color.WHITE);
la.setFont(new Font("Verdana", 3, 16));
la.setHorizontalAlignment(SwingConstants.CENTER);
la.setVerticalAlignment(SwingConstants.TOP);
la.setVerticalTextPosition(JLabel.BOTTOM);
la.setHorizontalTextPosition(JLabel.CENTER);
window.add(la);
}
разбил код представленный выше на 3 части, вызвал у JFrame revalidate, сработал таймер и ОО JLabel сменил картинку. Просто по из любопытства попробую завтра положить JLabel в JPanel и посмотреть что будет при revalidate JPanel, как не хочется долбить JFrame, хоть по нему и не видно )
И все таки это как то не удобно все, код обрастает до безумства, какими то уловка и окольными путями, простой подмены не сделать не стереть и не пересоздать, чем дальше тем чудесее и чудесее.
Решение задачи: «Перерисовать Jlabel»
textual
Листинг программы
private void the_weather_start()
{
if (blok == false){the_weather();}else{the_weather_static();}
}
private void the_weather_static()
{
ImageIcon icon = new ImageIcon("weather/"+data[0]+".png");
la.setText(data[1]);
la.setIcon(icon);
box.revalidate();
box.repaint();
}
private void the_weather()
{
blok = true;
ImageIcon icon = new ImageIcon("weather/"+data[0]+".png");
la = new JLabel();
la.setBackground(new Color(0,0,0,70));
la.setIcon(icon);
la.setText(data[1]);
la.setForeground(Color.WHITE);
la.setFont(new Font("Verdana", 3, 16));
la.setHorizontalAlignment(SwingConstants.CENTER);
la.setVerticalAlignment(SwingConstants.TOP);
la.setVerticalTextPosition(JLabel.BOTTOM);
la.setHorizontalTextPosition(JLabel.CENTER);
box.setBounds(23, 340, 170, 170);
box.setOpaque(false);
box.add(la);
window.add(box);
}