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
[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 [/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:
- Não utilize grabFocus().
- 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