Hey galera, sou iniciante em Java e um problema aqui está acabando com meu ânimo de programar em Java:
Na classe main tenho um JFrame com um JTextField e um botão. Quando clico no botão quero imprimir o que está escrito no JTextField, porém, não estou conseguindo acessá-lo dentro do evento mouseClicked.
Mas como posso indicar ao compilador que esta ação refere-se ao clique do botão?
Aqui vai o código:
importjava.awt.GridLayout;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjavax.swing.*;publicclassPrincipalimplementsMouseListener{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame.setBounds(300,300,300,180);frame.setTitle("Tela de login");JPanelpanel=newJPanel();panel.setLayout(newGridLayout(6,1));panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));frame.add(panel);JLabellbl_login=newJLabel();lbl_login.setText("Login");JTextFieldtxt_login=newJTextField();JLabellbl_senha=newJLabel();lbl_senha.setText("Senha");JTextFieldtxt_senha=newJTextField();JButtonbtn_ok=newJButton();btn_ok.setText("Ok");Principalb=newPrincipal();btn_ok.addMouseListener(b);panel.add(lbl_login);panel.add(txt_login);panel.add(lbl_senha);panel.add(txt_senha);panel.add(newJLabel());panel.add(btn_ok);frame.setVisible(true);}@OverridepublicvoidmouseClicked(MouseEventarg0){// TODO Auto-generated method stubString[]data={"Arara","Laranja","Teto","Amarelo","Flor"};JListlst_senhas=newJList(data);for(inti=0;i<5;i++){if(//PRECISO ACESSAR O JTEXTFIELD AQUI}}@OverridepublicvoidmouseEntered(MouseEventarg0){// TODO Auto-generated method stub}@OverridepublicvoidmouseExited(MouseEventarg0){// TODO Auto-generated method stub}@OverridepublicvoidmousePressed(MouseEventarg0){// TODO Auto-generated method stub}@OverridepublicvoidmouseReleased(MouseEventarg0){// TODO Auto-generated method stub}}
Andre_Brito
Na verdade, nesse seu caso acho que não teria como, porque você cria uma nova classe pra lidar com os eventos do Mouse e não vai conseguir ‘ver’ o JTextField. O que você poderia fazer é delegar pra outra classe que vai lidar no JTextField (frame -> button -> mouseListener -> thatFrameManager -> frame’sTextField). Não sei até que ponto é legal de fazer isso… Acho que pode diminuir um pouco o acoplamento, mas aumenta a complexidade. Mas acredito que pode funcionar.
Mas assim… Se vai ficar tudo na mesma tela, uma alternativa é você colocar junto, na mesma classe, o mouseListener. Quem sabe de retorno de um método, se você deixar o JTextField como variável de instância. Algo como
De qualquer forma, não sei se é o melhor jeito de resolver isso. O interessante seria ver alguem que entende bastante de Swing pra dar a direção correta.