2013-08-02 3 views
0

им просто изучает java но ..почему этот компилятор, но не меняет seticon

почему его не меняют? Я могу изменить значок с помощью значка set, если я положил его в исполнительский режим кнопки: |

ГЛАВНЫЙ КЛАСС

package tstando; 

public class executor { 
    public static void main(String[] args) { 
     Tela inicia = new Tela(); 
     inicia.run(); 
    } 
} 

класс GUI (Tela)

package tstando;  

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JLabel; 
import javax.swing.JButton;  
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;  

public class Tela extends JFrame {  

    public JLabel lblImage = new JLabel("New label"); 

    private static final long serialVersionUID = 1L; 
    public JPanel contentPane; 

      public void run() { 
       try { 
        Tela frame = new Tela(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
    public Tela() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null);    
     lblImage.setBounds(71, 31, 277, 150); 
     contentPane.add(lblImage);   
     lblImage.setIcon(new ImageIcon("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg"));   
     JButton btnAlteraImagem = new JButton("Altera Imagem"); 
     btnAlteraImagem.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
      metodos met = new metodos();  
      //lblImage.setIcon(new ImageIcon("C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg")); 
      }    
     }); 
     btnAlteraImagem.setBounds(148, 213, 182, 23); 
     contentPane.add(btnAlteraImagem); 
    } 
} 

и класс метода

package tstando; 

import java.io.IOException;  
import javax.swing.ImageIcon;  

public class metodos { 

Tela altera = new Tela(); 
String link = "C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg"; 

    public void alterajlabel() throws IOException { 
     altera.lblImage.setIcon(new ImageIcon(link));  
    } 
} 

ответ

2

Прежде всего, вы никогда не называйте alterajlabel, во-вторых, экземпляр Tela в вашем alterajlabel вашего metodos Класс - это не тот экземпляр, который находится на экране. Вы просто просто создаете другую копию и модифицируете ее.

Вместо этого, вы должны передать ссылку на Tela к metodos при ее создании, таким образом metodos может иметь дело с экземпляром, который находится на экране

Вам нужно будет изменить свой metodos класс выглядеть как. ..

public class metodos { 
    Tela tela; 
    String link = "C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg"; 

    public metods(Tela tela) { 
     this.tela = tela; 
    } 

    public void alterajlabel() throws IOException { 
     tela.lblImage.setIcon(new ImageIcon(link)); 
    } 
} 

затем нужно будет модифицировать ActionListener из ваших btnAlteraImagem более как ...

btnAlteraImagem.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     metodos met = new metodos(Tela.this); 
     try { 
      met.alterajlabel(); 
     } catch (IOException exp) { 
      exp.printStackTrace(); 
     } 
    } 
}); 

Вы также можете сделать ...

public class metodos { 

    String link = "C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg"; 
    public void alterajlabel(Tela tela) throws IOException { 
     tela.lblImage.setIcon(new ImageIcon(link)); 
    } 
} 

И называть это как ...

btnAlteraImagem.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     metodos met = new metodos(); 
     try { 
      met.alterajlabel(Tela.this); 
     } catch (IOException exp) { 
      exp.printStackTrace(); 
     } 
    } 
}); 

Который, вероятно, немного лучше подход.

На мой взгляд, однако, было бы лучше, чтобы сделать что-то вроде ...

public class metodos { 

    String link = "C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg"; 
    public void alterajlabel(JLabel label) throws IOException { 
     label.setIcon(new ImageIcon(link)); 
    } 
} 

Что бы вы назвали, как ...

btnAlteraImagem.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     metodos met = new metodos(); 
     try { 
      met.alterajlabel(lblImage); 
     } catch (IOException exp) { 
      exp.printStackTrace(); 
     } 
    } 
}); 

Это означает, что вы не подвергая Tela излишне

Возможно, вы захотите посмотреть Code Conventions for the Java Programming Language и Learning the Java Language для получения более подробной информации

Кроме того, в то время как я знаю, что может показаться путаницы, я бы настоятельно рекомендуем вам взять время, чтобы узнать, как use layout managers

+0

чтение, чтобы понять, я буду отвечать за несколько минут !! thx ответ !! – user2582318

+0

THX работал как шарм !!! THX так много, будет изучать, как эта работа =) – user2582318

+0

* «работал как шарм *» - Opps, должно быть, сделал что-то не так;) - Приятно знать, что это помогло – MadProgrammer

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