Перерисовать 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д