Problema com Swing e AWT

5 respostas
R

Boa noite pessoal. É o seguinte … eu quero que quando o usuário clicar em uma opção do menu, apareça um determinado conteúdo na tela.
Estou fazendo assim …

import javax.swing.;
import java.awt.
;

public class Frame extends JFrame

{

private JTextField texto1;

private JLabel label1;

private JLabel label;
public Frame()
{
    super("Cadastro de usuário");
    Object label;
    setLayout( new FlowLayout() );

    JMenuBar barra = new JMenuBar();
    setJMenuBar(barra);
    JMenu opcao1 = new JMenu("Arquivo");
    JMenu novo = new JMenu("Novo Cadastro");
    JMenu editar = new JMenu("Editar Cadastro Corrente");
    barra.add(opcao1);
    opcao1.add(novo);
    opcao1.add(editar);
    
    if(novo.isSelected())
    {
        label1 = new JLabel("Nome");
         add(label1);
         texto1 = new JTextField(10);
        add(texto1);
    }
    else
    {
        label = new JLabel("Arquivo novo não-selecionado!");
    }
}

}

Como podem perceber estou tentando fazer isso através de if(novo.isSelected()), mas não funciona. Não acontece nada quando clico na opção Novo Cadastro. Como devo fazer?

5 Respostas

C

se voce está querendo que quando alguem clicar no item de menu..abra uma nova janela para um cadastro ou consulta,. voce deve adicionar um actionListener a esse item de menu, semelhante ao JButton.

novo.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent event){
  //faz alguma coisa;;

}
});
R

Carlos eu mudei o código e deixei desta forma …

import java.awt.event.<em>;

import javax.swing.</em>;

import java.awt.*;
public class Frame extends JFrame

{

private JTextField texto1;

private JLabel label1;

private JLabel label;
public Frame()
{
    super("Cadastro de usuário");
    Object label;
    setLayout( new FlowLayout() );

    JMenuBar barra = new JMenuBar();
    setJMenuBar(barra);
    JMenu opcao1 = new JMenu("Arquivo");
    JMenu novo = new JMenu("Novo Cadastro");
    JMenu editar = new JMenu("Editar Cadastro Corrente");
    barra.add(opcao1);
    opcao1.add(novo);
    opcao1.add(editar);
    
    if(novo.isSelected())
    {
        novo.addActionListener(
        new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                label1 = new JLabel("Nome");
                add(label1);
                texto1 = new JTextField(10);
                add(texto1);
            }
        });
    }
}

}

… mas continua não acontecendo nada. :sad:

C

Em voce nao precisa do if que tem o isSelected, o metodo do actionListener é disparado toda a vez que voce clicar no item do menu.

R

Então vc me aconselha tirar o if? Ficaria assim …

import java.awt.event.<em>;

import javax.swing.</em>;

import java.awt.*;
public class Frame extends JFrame

{

private JTextField texto1;

private JLabel label1;

private JLabel label;
public Frame()
{
    super("Cadastro de usuário");
    Object label;
    setLayout( new FlowLayout() );

    JMenuBar barra = new JMenuBar();
    setJMenuBar(barra);
    JMenu opcao1 = new JMenu("Arquivo");
    JMenu novo = new JMenu("Novo Cadastro");
    JMenu editar = new JMenu("Editar Cadastro Corrente");
    barra.add(opcao1);
    opcao1.add(novo);
    opcao1.add(editar);
    
    novo.addActionListener(
    new ActionListener()
    {
        public void actionPerformed(ActionEvent event)
        {
            label1 = new JLabel("Nome");
            add(label1);
            texto1 = new JTextField(10);
            add(texto1);
        }
    });
}

}

… é, eu fiz isso e continua não acontecendo nada ao clicar no ítem do menu. :cry:

L

Ola,

Sou novo na programação com Java e Swing, porém fiz uma pequena modificação no seu código e funcionou perfeitamente.

Você precisa chamar o método pack() de JFrame para ele recalcular o espaço ocupado pelo frame.

import java.awt.event.<em>;

import javax.swing.</em>;

import java.awt.*;
public class Frame extends JFrame

{

private JTextField texto1;

private JLabel label1;

private JLabel label;
public Frame()

{

super(Cadastro de usuário);

Object label;

setLayout( new FlowLayout() );
JMenuBar barra = new JMenuBar();

setJMenuBar(barra);

JMenu opcao1 = new JMenu(Arquivo);

JMenuItem novo = new JMenuItem(Novo Cadastro);

JMenu editar = new JMenu(Editar Cadastro Corrente);

barra.add(opcao1);

opcao1.add(novo);

opcao1.add(editar);
novo.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent event)

{

label1 = new JLabel(Nome);

add(label1);

texto1 = new JTextField(10);

add(texto1);

pack();

}

});

}

}

Abraços,

Carlos

Criado 9 de agosto de 2007
Ultima resposta 11 de ago. de 2007
Respostas 5
Participantes 3