Dúvidas sobre Jbutton

Oi gostaria de saber como eu faço um botão que após ser clicado, mude o focus das caixas de texto, e tambem outro botão que apos ser clicado apareça uma janela (showmessage).
Muito obrigado quem puder me ajudar.

Cara eu nao entendi muito bem a primeira pergunta, mas quanto a segunda tu pode fazer assim:

JButton teu_botao = new JButton();
JFrame showmessage = new JFrame();
...
teu_botao.addActionListener(){
          showmessage.setvisible(true);

}

Quando o botao for clicado vai exibir a janela de showmessage.
Espero ter ajudado
Abraço :wink:

[quote=matheuslmota]Cara eu nao entendi muito bem a primeira pergunta, mas quanto a segunda tu pode fazer assim:

JButton teu_botao = new JButton();
JFrame showmessage = new JFrame();
...
teu_botao.addActionListener(){
          showmessage.setvisible(true);

}

Quando o botao for clicado vai exibir a janela de showmessage.
Espero ter ajudado
Abraço :wink: [/quote]

Gerar um formulário que apresente um botão. Quando o botão for pressionado apareça seu nome, curso e turno.
Alterar o primeiro formulário, acrescentando um botão que ao ser pressionado pule as caixas de texto com os seguintes dados: identificador, descrição, data e preço.

[quote=GSFRGV]Oi gostaria de saber como eu faço um botão que após ser clicado, mude o focus das caixas de texto, e tambem outro botão que apos ser clicado apareça uma janela (showmessage).
Muito obrigado quem puder me ajudar.[/quote]

Ninguem para ajudar?

o codigo está assim mas eu não sei o codigo para pular de o focus quando clicar no botão

import java.awt.;
import java.awt.event.
;
import javax.swing.*;

class Form3 extends JFrame implements ActionListener, TextListener
{

JLabel lblIdentificador, lblProduto;
JLabel lblDataFabricacao,lblPreco;
JTextField txtIdentificador, txtProduto;
JTextField txtDataFabricacao, txtPreco;
JPanel p1,p2,p3,p4;
JButton b1;

public static void main(String args[])
{
JFrame janela = new Form3();
janela.setUndecorated(true);
janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setVisible(true);

}

Form3()
{
setTitle("Primeiro formulário ");
setBounds(230,50,340,120); //x,y,w,h
getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT));
lblIdentificador = new JLabel(“Identificador”);
lblIdentificador.setForeground(Color.blue);
lblProduto = new JLabel(“Produto”);
lblProduto.setForeground(Color.blue);
lblDataFabricacao = new JLabel(“Data de fabricação”);
lblDataFabricacao.setForeground(Color.blue);
lblPreco = new JLabel(“Preço de compra”);
lblPreco.setForeground(Color.blue);
b1 = new JButton (“MUDAR”);
b1.addActionListener(this);
b1.setForeground(Color.blue);
b1.setSize(200,200);
getContentPane().add(b1);

txtIdentificador = new JTextField(5);   
txtProduto = new JTextField(15);
txtDataFabricacao = new JTextField(15);
txtPreco = new JTextField(15);
p1 = new JPanel();        
p2 = new JPanel();
p3 = new JPanel();
p4 = new JPanel(); 

p1.setBackground(new Color(200,200,200));
p1.add(lblIdentificador); 
p1.add(txtIdentificador);
p2.add(lblProduto);  
p2.add(txtProduto);   
p2.setBackground(new Color(200,200,200));
p2.setBounds(10, 20, 40, 10);
p3.add(lblDataFabricacao);  
p3.add(txtDataFabricacao);   
p3.setBackground(new Color(200,200,200));
p4.add(lblPreco);  
p4.add(txtPreco);   
p4.setBackground(new Color(200,200,200));
getContentPane().add(p1);  
getContentPane().add(p2);
getContentPane().add(p3);
getContentPane().add(p4); 
getContentPane().add(b1);
  }

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void textValueChanged(TextEvent arg0) {
// TODO Auto-generated method stub

}

}

Boa noite a todos.

Me perdoe a intromissão Matheuslmota, porém o código que voce passou acima não está correto.

O código correto seria esse:

        JButton teu_botao = new JButton();   
        JFrame showmessage = new JFrame();      
        teu_botao.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                showmessage.setVisible(true);
            }
        });

Para responder essa pergunta, primeiramente tenho que consertar a lógica do código que voce postou.

Em seu código, voce colocou alguns JTextField e um JButton para mudar o foco dos JTextFields. De ante mão, esta lógica não está correta e voce sabe porque :?: Muito simples, quando voce clica no botão JButton “Mudar” antes de disparar o método ActionPerformed do ouvinte de evento ActionListener quem ganha o foco é justamente o JButton “Mudar”, para então depois disparar a execução do método citado, neste caso, pegunto, tem como identificar qual o JTextField que está com o foco, no ActionPerformed, se foi o JButton “Mudar” que acabou de ganhar o foco :?: :?: :?: Evidentemente que não.

A maneira correta de fazer isso e fazer com eventos de teclado, ou seja, caso voce acabe de digitar algo dentro do txtIdentificador, ao pressionar Enter ou Tab, mude o foco para JTextField seguinte, ai sim funcionaria, isto porque quando voce digita algo dentro de um JTextField, que mantém o foco é ele, e por isso fica fácil de identificar, então lapidando um pouco o código que voce postou, e tirando o TextListener e o ActionListener e acrescentado o KeyListener, este ficou mais ou menos assim;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Form3 extends JFrame implements KeyListener
{

JLabel lblIdentificador, lblProduto;
JLabel lblDataFabricacao,lblPreco;
JTextField txtIdentificador, txtProduto;
JTextField txtDataFabricacao, txtPreco;
JPanel p1,p2,p3,p4;
JButton b1;


public Form3()
{
  setUndecorated(true);
  getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
  setLayout(new FlowLayout(FlowLayout.LEFT));
  initComponents();
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setTitle("Primeiro formulário ");
  setSize(400,140);
  // setBounds(230,150,340,120); //x,y,w,h
  setResizable(false);
  setLocationRelativeTo(null); // Centraliza o frame
  setVisible(true);
}

private void initComponents(){
  lblIdentificador = new JLabel("Identificador");
  lblIdentificador.setForeground(Color.blue);
  lblProduto = new JLabel("Produto");
  lblProduto.setForeground(Color.blue);
  lblDataFabricacao = new JLabel("Data de fabricação");
  lblDataFabricacao.setForeground(Color.blue);
  lblPreco = new JLabel("Preço de compra");
  lblPreco.setForeground(Color.blue);
  /* b1 = new JButton ("MUDAR");
  b1.setForeground(Color.blue);
  b1.setSize(200,200);
  getContentPane().add(b1); */

  txtIdentificador = new JTextField(5);
  txtIdentificador.addKeyListener(this);
  txtProduto = new JTextField(15);
  txtProduto.addKeyListener(this);
  txtDataFabricacao = new JTextField(15);
  txtDataFabricacao.addKeyListener(this);
  txtPreco = new JTextField(15);
  txtPreco.addKeyListener(this);
  p1 = new JPanel();
  p2 = new JPanel();
  p3 = new JPanel();
  p4 = new JPanel();

  p1.setBackground(new Color(200,200,200));
  p1.add(lblIdentificador);
  p1.add(txtIdentificador);
  p2.add(lblProduto);
  p2.add(txtProduto);
  p2.setBackground(new Color(200,200,200));
  p2.setBounds(10, 20, 40, 10);
  p3.add(lblDataFabricacao);
  p3.add(txtDataFabricacao);
  p3.setBackground(new Color(200,200,200));
  p4.add(lblPreco);
  p4.add(txtPreco);
  p4.setBackground(new Color(200,200,200));
  getContentPane().add(p1);
  getContentPane().add(p2);
  getContentPane().add(p3);
  getContentPane().add(p4);
  getContentPane().add(b1);
  txtIdentificador.grabFocus(); // coloca inicialmente o foco no indentificador
}

public void keyTyped(KeyEvent e) {
  // Método de evento não utilizado porém precisa ser declarado
}

public void keyPressed(KeyEvent e) {
  if (e.getKeyCode() == KeyEvent.VK_ENTER){
      if (txtIdentificador.hasFocus()){
          txtProduto.grabFocus();
      } else if (txtProduto.hasFocus()){
          txtDataFabricacao.grabFocus();
      } else if (txtDataFabricacao.hasFocus()){
          txtPreco.grabFocus();
      } else if (txtPreco.hasFocus()){
          txtIdentificador.grabFocus();
      }
  }
}

public void keyReleased(KeyEvent e) {
    // Método de evento não utilizado porém precisa ser declarado
}

}

Repare que no código eu comentei o botão “Mudar”, porém caso voce ainda precise dele, não se esqueça de reacrescentar o evento ActionListener de novo, para o implementar o disparo do botão

[quote=discorpio]Boa noite a todos.

Me perdoe a intromissão Matheuslmota, porém o código que voce passou acima não está correto.

O código correto seria esse:

        JButton teu_botao = new JButton();   
        JFrame showmessage = new JFrame();      
        teu_botao.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                showmessage.setVisible(true);
            }
        });

Para responder essa pergunta, primeiramente tenho que consertar a lógica do código que voce postou.

Em seu código, voce colocou alguns JTextField e um JButton para mudar o foco dos JTextFields. De ante mão, esta lógica não está correta e voce sabe porque :?: Muito simples, quando voce clica no botão JButton “Mudar” antes de disparar o método ActionPerformed do ouvinte de evento ActionListener quem ganha o foco é justamente o JButton “Mudar”, para então depois disparar a execução do método citado, neste caso, pegunto, tem como identificar qual o JTextField que está com o foco, no ActionPerformed, se foi o JButton “Mudar” que acabou de ganhar o foco :?: :?: :?: Evidentemente que não.

A maneira correta de fazer isso e fazer com eventos de teclado, ou seja, caso voce acabe de digitar algo dentro do txtIdentificador, ao pressionar Enter ou Tab, mude o foco para JTextField seguinte, ai sim funcionaria, isto porque quando voce digita algo dentro de um JTextField, que mantém o foco é ele, e por isso fica fácil de identificar, então lapidando um pouco o código que voce postou, e tirando o TextListener e o ActionListener e acrescentado o KeyListener, este ficou mais ou menos assim;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Form3 extends JFrame implements KeyListener
{

JLabel lblIdentificador, lblProduto;
JLabel lblDataFabricacao,lblPreco;
JTextField txtIdentificador, txtProduto;
JTextField txtDataFabricacao, txtPreco;
JPanel p1,p2,p3,p4;
JButton b1;


public Form3()
{
  setUndecorated(true);
  getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
  setLayout(new FlowLayout(FlowLayout.LEFT));
  initComponents();
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setTitle("Primeiro formulário ");
  setSize(400,140);
  // setBounds(230,150,340,120); //x,y,w,h
  setResizable(false);
  setLocationRelativeTo(null); // Centraliza o frame
  setVisible(true);
}

private void initComponents(){
  lblIdentificador = new JLabel("Identificador");
  lblIdentificador.setForeground(Color.blue);
  lblProduto = new JLabel("Produto");
  lblProduto.setForeground(Color.blue);
  lblDataFabricacao = new JLabel("Data de fabricação");
  lblDataFabricacao.setForeground(Color.blue);
  lblPreco = new JLabel("Preço de compra");
  lblPreco.setForeground(Color.blue);
  /* b1 = new JButton ("MUDAR");
  b1.setForeground(Color.blue);
  b1.setSize(200,200);
  getContentPane().add(b1); */

  txtIdentificador = new JTextField(5);
  txtIdentificador.addKeyListener(this);
  txtProduto = new JTextField(15);
  txtProduto.addKeyListener(this);
  txtDataFabricacao = new JTextField(15);
  txtDataFabricacao.addKeyListener(this);
  txtPreco = new JTextField(15);
  txtPreco.addKeyListener(this);
  p1 = new JPanel();
  p2 = new JPanel();
  p3 = new JPanel();
  p4 = new JPanel();

  p1.setBackground(new Color(200,200,200));
  p1.add(lblIdentificador);
  p1.add(txtIdentificador);
  p2.add(lblProduto);
  p2.add(txtProduto);
  p2.setBackground(new Color(200,200,200));
  p2.setBounds(10, 20, 40, 10);
  p3.add(lblDataFabricacao);
  p3.add(txtDataFabricacao);
  p3.setBackground(new Color(200,200,200));
  p4.add(lblPreco);
  p4.add(txtPreco);
  p4.setBackground(new Color(200,200,200));
  getContentPane().add(p1);
  getContentPane().add(p2);
  getContentPane().add(p3);
  getContentPane().add(p4);
  getContentPane().add(b1);
  txtIdentificador.grabFocus(); // coloca inicialmente o foco no indentificador
}

public void keyTyped(KeyEvent e) {
  // Método de evento não utilizado porém precisa ser declarado
}

public void keyPressed(KeyEvent e) {
  if (e.getKeyCode() == KeyEvent.VK_ENTER){
      if (txtIdentificador.hasFocus()){
          txtProduto.grabFocus();
      } else if (txtProduto.hasFocus()){
          txtDataFabricacao.grabFocus();
      } else if (txtDataFabricacao.hasFocus()){
          txtPreco.grabFocus();
      } else if (txtPreco.hasFocus()){
          txtIdentificador.grabFocus();
      }
  }
}

public void keyReleased(KeyEvent e) {
    // Método de evento não utilizado porém precisa ser declarado
}

}

Repare que no código eu comentei o botão “Mudar”, porém caso voce ainda precise dele, não se esqueça de reacrescentar o evento ActionListener de novo, para o implementar o disparo do botão[/quote]

É realmente.
Mas esse codigo aqui faz mudar o cursor só que eu só sei para mudar para a caixa de texto seguinte, se tiver como mudar para as outras

public void actionPerformed(ActionEvent arg0) {
txtIdentificador.nextFocus();

}

Correto discorpio.
Desculpem por postar o código errado.

ATENÇÃO!!!

Leiam o que diz a documentação do método grabFocus():
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JComponent.html#grabFocus()

Ou seja:
Esse método é feito para ser usado pelo mecanismo de foco, e não deve ser usado nos programas de vocês. Sempre leiam atentamente o javadoc antes de usar qualquer método. Senão depois a aplicação não funciona direito, e quem leva a culpa é o java.

No lugar, o método sugere o uso do requestFocus(). Agora, se vocês forem até a documentação do requestFocus, há uma recomendação lá:
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JComponent.html#requestFocus()

Ou seja, como o comportamento do requestFocus() depende de plataforma, os desenvolvedores são extremamente encorajados a usar o método requestFocusInWindow().

Ou seja:

  1. Não utilize grabFocus().
  2. Prefira o requestFocusInWindow() ao requestFocus().

O código do discorpio, corrigido, fica:

[code]
import java.awt.;
import java.awt.event.
;
import javax.swing.*;

public class Form3 extends JFrame implements KeyListener
{

JLabel lblIdentificador, lblProduto;
JLabel lblDataFabricacao,lblPreco;
JTextField txtIdentificador, txtProduto;
JTextField txtDataFabricacao, txtPreco;
JPanel p1,p2,p3,p4;
JButton b1;

public Form3()
{
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
setLayout(new FlowLayout(FlowLayout.LEFT));
initComponents();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Primeiro formulário ");
setSize(400,140);
// setBounds(230,150,340,120); //x,y,w,h
setResizable(false);
setLocationRelativeTo(null); // Centraliza o frame
setVisible(true);
}

private void initComponents(){
lblIdentificador = new JLabel(“Identificador”);
lblIdentificador.setForeground(Color.blue);
lblProduto = new JLabel(“Produto”);
lblProduto.setForeground(Color.blue);
lblDataFabricacao = new JLabel(“Data de fabricação”);
lblDataFabricacao.setForeground(Color.blue);
lblPreco = new JLabel(“Preço de compra”);
lblPreco.setForeground(Color.blue);
/* b1 = new JButton (“MUDAR”);
b1.setForeground(Color.blue);
b1.setSize(200,200);
getContentPane().add(b1); */

txtIdentificador = new JTextField(5);
txtIdentificador.addKeyListener(this);
txtProduto = new JTextField(15);
txtProduto.addKeyListener(this);
txtDataFabricacao = new JTextField(15);
txtDataFabricacao.addKeyListener(this);
txtPreco = new JTextField(15);
txtPreco.addKeyListener(this);
p1 = new JPanel();
p2 = new JPanel();
p3 = new JPanel();
p4 = new JPanel();

p1.setBackground(new Color(200,200,200));
p1.add(lblIdentificador);
p1.add(txtIdentificador);
p2.add(lblProduto);
p2.add(txtProduto);
p2.setBackground(new Color(200,200,200));
p2.setBounds(10, 20, 40, 10);
p3.add(lblDataFabricacao);
p3.add(txtDataFabricacao);
p3.setBackground(new Color(200,200,200));
p4.add(lblPreco);
p4.add(txtPreco);
p4.setBackground(new Color(200,200,200));
getContentPane().add(p1);
getContentPane().add(p2);
getContentPane().add(p3);
getContentPane().add(p4);
getContentPane().add(b1);
txtIdentificador.requestFocusInWindow(); // coloca inicialmente o foco no indentificador
}

public void keyTyped(KeyEvent e) {
// Método de evento não utilizado porém precisa ser declarado
}

public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER){
if (txtIdentificador.hasFocus()){
txtProduto.requestFocusInWindow();
} else if (txtProduto.hasFocus()){
txtDataFabricacao.requestFocusInWindow();
} else if (txtDataFabricacao.hasFocus()){
txtPreco.grabFocus();
} else if (txtPreco.hasFocus()){
txtIdentificador.requestFocusInWindow();
}
}
}

public void keyReleased(KeyEvent e) {
// Método de evento não utilizado porém precisa ser declarado
}

}[/code]

Por fim. Gostaria de ressaltar que usar o KeyPress não é a maneira correta de tratar foco (aliás, o KeyPress quase nunca é a maneira correta de se fazer qualquer coisa em Swing). O mecanismo de foco do Java é um pouco mais complexo do que isso. Seria bom ler o artigo da sun How to use the focus subsystem, e também ver esse post do thingol, que explica o jeito certo de fazer:
http://www.guj.com.br/posts/list/92862.java#497384