Thread mais valores da jlabel

galerinha q eu adoro. “ajuda eu”…
fiz um programinha básico jFrame ele recebe valor da jTextfild e exibe junto com mensagem na tela de console e após alguns segundo exibe outra isso após um único click no botão ate ae ok.
mas quero exibir a mensagem na Jlabel e não na tela de console como passo os valores para la no meu método run?

// 
    JButton btn = new JButton("Confirmar!");
    	public JLabel lbl = new JLabel();
    	JTextField txt = new JTextField();
    	public int num;
    	Banco b1 = new Banco();
//
	    @Override
    	public void actionPerformed(ActionEvent e) {
    		// JOptionPane.showMessageDialog(null, "Informaçao Incorreta!", "ERRO!",
    		// JOptionPane.ERROR_MESSAGE);
    		String agrumento = this.getTxt().getText();
    		// passa o texto digitado na JTF para as variaves do metodo recebeTexto!
    		b1.recebeTexto(agrumento);
    		b1.start();
    		}
    	public JButton getBtn() {
    		return btn;
    	}
//
    String atendente;
    	boolean repetir = true;
    	String nome;
    public void recebeTexto(String tx) {
    		this.nome = tx;
    	}
    	
    	public void run() {

    		this.atendente = ("Bom dia " + nome + " Como vai?");
    		System.out.println(atendente);
    				
    		try {
    			sleep(3000);
    			
    		this.atendente = (nome + " Voce posui R$" + banc + " depositados!");
    		System.out.println(atendente);
    			
    		} catch (InterruptedException e) {

    			e.printStackTrace(); 
    		}
    	}
lbl.setText("texto");

a label esta na classe principal! como jogo as informações desta classe para ela?

Você pode criar um método para retornar o seu jLabel ou tornar a variável do jLabel como static ou então você tendo uma instancia da classe você pode acessar normalmente a variavel.

Jeito 1:

public jLabel getLabel(){
return label;
}

Jeito 2:

public static JLabel lbl = new JLabel();
ClasseEmQueEstaAVariavel.lbl.setText...

Jeito 3:

ClasseDoLabel c = new ClasseDoLabel();
c.lbl.setText...

Indico você dar uma lida sobre Orientação de Objetos, é meio que a base para você progredir em java, tais como essas questões de metódos, instancias, parametros, classe, etc.

isso to ligado o problema e que não consigo sincronizar com o botão. vou mandar o código todo para ver se vc pode me ajudar.
package sw;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class Start extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;

	JButton btn = new JButton("Confirmar!");
	public JLabel lbl = new JLabel();
	JTextField txt = new JTextField();
	public int num;
	Banco b1 = new Banco();

	public void janela() {
		componentes();
		setTitle("Banco");
		setSize(350, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);
	}

	public void componentes() {
		// Botão
		setLayout(null);
		btn.setBounds(120, 350, 100, 60);
		btn.setFocusable(false); // retira o contorno do texto!
		btn.addActionListener(this);
		getContentPane().add(btn);
		// texto
		setLayout(null);
		lbl.setBounds(10, 80, 300, 50);
		lbl.setText("<html> <center> BOM DIA! <br> Por favor informe seu nome!");
		lbl.setHorizontalAlignment(SwingConstants.CENTER); // centraliza o texto
		Font fonte = new Font("Bahnschrift SemiBold Condensed", Font.BOLD, 16);
		lbl.setFont(fonte);
		lbl.setForeground(Color.BLUE);
		getContentPane().add(lbl);
		// Entradade dados
		setLayout(null);
		txt.setBounds(120, 270, 100, 30);
		txt.setHorizontalAlignment(SwingConstants.CENTER); // centraliza o texto
		txt.setFocusable(true); // retira o contorno do texto!
		getContentPane().add(txt);

	}

	public static void main(String[] args) {

		Start start = new Start();
		start.janela();

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// JOptionPane.showMessageDialog(null, "Informaçao Incorreta!", "ERRO!",
		// JOptionPane.ERROR_MESSAGE);
		
		String agrumento = this.getTxt().getText();
		// passa o texto digitado na JTF para as variaves do metodo recebeTexto!
		b1.recebeTexto(agrumento);
		
		this.getLbl().setText(b1.arg);
		b1.start();
		
	
		}


	public JButton getBtn() {
		return btn;
	}

	public void setBtn(JButton btn) {
		this.btn = btn;
	}

	public JLabel getLbl() {
		return lbl;
	}

	public void setLbl(JLabel lbl) {
		this.lbl = lbl;
	}

	public JTextField getTxt() {
		return txt;
	}

	public void setTxt(JTextField txt) {
		this.txt = txt;
	}

}

////////
package sw;

public class Banco extends Thread {

	float banc = 0.0f;
	float dep = 0.0f;

	String atendente;
	boolean repetir = true;
	String nome;
	String arg;

	public void recebeTexto(String tx) {
		this.nome = tx;
	}

	public void run() {

		// this.atendente = ("Bom dia " + nome + " Como vai?"");
		// System.out.println(atendente);
		System.out.println(atendente);
		arg = "Bom dia " + nome + " Como vai?";  // parece q funcionou mas to 
												//tendo q dar 2 cliks no botao e so quero com um!

		try {
			sleep(3000);

			// this.atendente = (nome + " Voce posui R$" + banc + " depositados!");
			// System.out.println(atendente);

		} catch (InterruptedException e) {

			e.printStackTrace();
		}

	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

}

Você pode pegar uma instância da classe Start em sua classe Banco pelo construtor.

public class Banco {
    private final Start start;

    public Banco(Start start) {
        this.start = start;
    }
    
    //e no seu método run() vc usa start.getLbl().getText()
}

Na classe Start você vai fazer new Banco(this);

1 curtida

Hummm amo esse Fórum, vcs são de + ate sabia q podia instanciara classe mas nem pensei nisso Obrigadão!