Dúvida sobre mouseListener [Resolvido]

8 respostas
W

olá pessoal sou iniciante na linguagem e estou querendo que ao clicar num dos itens do meu, seja chamado um determinado método da minha classe, abaixo esta o codigo fonte que nao funciona, qualquer ajuda eh bem vinda, obrigado…

import javax.swing.*;
import java.awt.*;
public class HelloWorldFrame{
	public void cadForn(){
		JFrame janela2 = new JFrame("Janela com menu");
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			
		JLabel teste = new JLabel("teste de janela");
                janela2.add(teste);
		janela2.setSize(500, 500);
		janela2.setVisible(true);
	}
	
	public static void main(String args[]) {
		JFrame janela = new JFrame("Janela com menu");
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			
		JMenuBar menuBar = new JMenuBar();
		JMenu Cadastro = new JMenu("Cadastro");
		JMenu Produtos = new JMenu("Produtos");
		JMenu Cotacoes = new JMenu("Cotações");
		JMenu Sobre = new JMenu("Sobre");
		menuBar.add(Cadastro);
		menuBar.add(Produtos);
		menuBar.add(Cotacoes);
		menuBar.add(Sobre);
		JMenuItem Fornecedor = new JMenuItem("Fornecedor");
		Fornecedor.addMouseListener(
			new java.awt.event.MouseAdapter() {
				public void mouseClicked() {
					CadForn frame2 = new CadForn();
				}
			}
		);
		Cadastro.add(Fornecedor);
		janela.setJMenuBar(menuBar);
		janela.setSize(500, 500);
		janela.setVisible(true);
	}
}

e outra duvida é como faria se ao inves de um metodo dentro da clase quizese chamar uma outra classe que está em outro arquivo .java.

8 Respostas

kaique

O problema é que para capturar um evento desse tipo que você descreveu, não é através de MouseListener, e sim um ActionListener.
Faça da mesma forma, mas troque a classe de acordo com o que lhe disse acima e depois implemente o método acionPerformed(ActionEvent e).

Qualquer coisa dá o toque…
[]'s.

W

cara funcionou akilo que vc disse mas surgiram outras duvidas…
uma delas…

new java.awt.event.ActionListener(){
    public void actionPerformed (java.awt.event.ActionEvent e){

se eu declarar so:

new ActionListener(){
    public void actionPerformed (ActionEvent e){

simplesmente nao funciona, da erro ao compilar e eu fiz o import java.awt.*;

outra duvida…

Fornecedor.addActionListener(
      new java.awt.event.ActionListener(){
            public void actionPerformed (java.awt.event.ActionEvent e){
                 JInternalFrame janela2 = new JInternalFrame("Internal", true, true, true, true);
                 janela2.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
                 JLabel teste = new JLabel("Teste de chamada");
                 janela2.add(teste);
                 janela2.setSize(300, 300);
                 janela2.setVisible(true);
                 janela.add(janela2);
            }
      }
);

queria colocar esse codigo em uma funçao e chamar apenas a função dentro do actionlistener
mas como fazer isso utilizando uma função a parte??

R

Quando eu uso esse código ele diz que o Calcular não pode ser resolvido

botaoCalcular.addActionListener(new java.awt.event.ActionListener()  {     
   public void actionPerformed(ActionEvent e) {     
      Calcular();  //nome da classe criada no mesmo pacote   
  }

O que será que está acontecendo?

obs: o método calcular esta no mesmo pacote

W

é possivel criar um internal frame a partir de uma função a parte??? e como seria a inserção desse internalframe em um frame???

Marky.Vasconcelos

Rafael Lima:
Quando eu uso esse código ele diz que o Calcular não pode ser resolvido

botaoCalcular.addActionListener(new java.awt.event.ActionListener()  {     
   public void actionPerformed(ActionEvent e) {     
      Calcular();  //nome da classe criada no mesmo pacote   
  }

O que será que está acontecendo?

obs: o método calcular esta no mesmo pacote

Está no mesmo pacote ou na mesma classe?

Para criar uma nova classe não se esqueça do new
E se for chamar um método statico (static) use Calcular.calcular();

W

decidi postar meu codigo como está agora pra deixar mais claro qual o meu problema agora…
desde já agradeço a ajuda dispensada…

import javax.swing.*;
import java.awt.*;
public class HelloWorldFrame{
	public void CadForn(){
		JInternalFrame janela2 = new JInternalFrame("Janela Interna", true, true, true, true);
		janela2.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);			
		JLabel teste = new JLabel("Teste de chamada");
		janela2.add(teste);
		janela2.setSize(300, 300);
		janela2.setVisible(true);
	}
	
	public static void main(String args[]) {
		final JFrame janela = new JFrame("Janela com menu");
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			
		JMenuBar menuBar = new JMenuBar();
		JMenu Cadastro = new JMenu("Cadastro");
		JMenu Produtos = new JMenu("Produtos");
		JMenu Cotacoes = new JMenu("Cotações");
		JMenu Sobre = new JMenu("Sobre");
		menuBar.add(Cadastro);
		menuBar.add(Produtos);
		menuBar.add(Cotacoes);
		menuBar.add(Sobre);
		JMenuItem Fornecedor = new JMenuItem("Fornecedor");
		Fornecedor.addActionListener(
			new java.awt.event.ActionListener(){
				public void actionPerformed (java.awt.event.ActionEvent e){
					 /*como chamar a função CadForn()
					   aki dentro??? e como adcionarei
					   a jinternalframe ao frame principal??*/
				}
			}
		);
		Cadastro.add(Fornecedor);
		janela.setJMenuBar(menuBar);
		janela.setSize(500, 500);
		janela.setVisible(true);
	}
}
LG11

Já pensou em torna-la privada? Caso dê algum erro… torne-a static. seguindo os 2 exemplos abaixo:
1.

public class HelloWorldFrame{ private JInternalFrame janela2 = new JInternalFrame("Janela Interna", true, true, true, true); public void CadForn(){ 2.

public class HelloWorldFrame{   
    private static JInternalFrame janela2 = new JInternalFrame("Janela Interna", true, true, true, true);
    public void CadForn(){

Assim você vai poder usar o JInternalFrame no “main”.

W

Obrigado cara dessa forma como voce falou funcionou perfeitamente. muito obrigado

Criado 6 de maio de 2008
Ultima resposta 10 de mai. de 2008
Respostas 8
Participantes 5