Problemas com jbutton e joptionpane

6 respostas
P
Problemas com joptionpane tenho uma classe com um metodo q cria botoes e para cada botao tem um joptionpane,até ai tudo bem o problema é que em uma outra classe em que uso este metodo eu qria salvar o texto dos botoes e do comentario mas eu so consegui salvar o texto dos botoes =( este é o codigo que gera o comentario nos botoes
public void botaoDireito()
	{
		this.addMouseListener(new java.awt.event.MouseAdapter() {   
			public void mouseReleased(java.awt.event.MouseEvent e) {   
				if (e.getButton() == MouseEvent.BUTTON3) {   
					String k=JOptionPane.showInputDialog("");
				}   
			}  

		}); 


	}
eu não sei como criar um metodo que armazene o conteudo q sera escrito neste joptionpane em uma classe diferente,sendo q ele esta sendo criada em outra Problemas com jbutton eu tenho uma classe em q para cada ck selecionada na tela eu tenho um botao,cada botao deveria abrir uma tela com conteudo diferente mas nao sei se é pq eles(checkbox,jbutton) estao sendo criados em uma mesma matriz e todas as checkbox tem de permanecer selecionadas por padrao como eu posso fazer para resolver isto? esta é a acao da minha combobox pq de acordo cm o q vc seleciona nela q sao geradas as checks e os botoes na tela
comboBox.addActionListener (new ActionListener (){
			public void actionPerformed(ActionEvent e)
			{

				try{
				
					pt.setBounds(20, 510, 750, 125);
					pt.setLayout(new FlowLayout());
					int c=0;
					if(comboBox.getSelectedItem().equals("Ensino Medio"))
					{
						pt.removeAll();
						c=1;
						resultado = comando.executeQuery("select nome from disciplina where ensino='"+c+"'order by nome");
						int q=0;
						while (resultado.next())
						{ 
							v[q]=resultado.getObject(1).toString();
							q++;
						}

						for(int i=0;i<ck.length;i++)
						{
							if(v[i]!=null)
							{
								ck[i][0]=new JCheckBox(v[i]);
								ck[i][1]=new JButton();
								ck[i][2]=v[i];
						
								((Component) ck[i][0]).setBounds(x, y1, 150, 25);
								((Component) ck[i][1]).setBounds(x+160, y1, 10, 10);
								((AbstractButton) ck[i][0]).setSelected(true);((AbstractButton) ck[i][1]).setSelected(true);
								pt.add((Component) ck[i][0]);pt.add((Component) ck[i][1]);
								x+=180;
					
								if(i==4 || i==9)
								{
									x=20;
									y1+=30;	
									pt.revalidate();
									pt.repaint(); 
									painel.add(pt);
									tela.repaint();
								}

							}
							if(ck[i][1]!=null)
							{
								((AbstractButton) ck[i][1]).addActionListener (new ActionListener (){  
									public void actionPerformed(ActionEvent e)
									{
										for(int i=0;i<ck.length;i++)
										{
											if(ck[i][0]!=null && ck[i][1]!=null && ck[i][2]!=null)
											{
												if(((AbstractButton) ck[i][0]).isSelected())
												{	

													ret[i]=(String) ck[i][2];
													if(i==0)
														tudo=ck[i][2]+txt;
													else
														tudo+=ck[i][2]+txt;
													
												}

											}

										}
										getRet();
									
									}});
							}
						}
						
						painel.revalidate();
						painel.repaint();
						tela.repaint();

					}
o codigo do metodo getRet() que deveria salvar os textos das chck para pesq no banco o conteudo da tela de cada botao
public String getRet()
	{
		StringTokenizer kp=new StringTokenizer(tudo,txt);
		List<String>tx=new ArrayList<String>();
		int pos=0;
		while(kp.hasMoreTokens())
		{
			tx.add(kp.nextToken());
			//System.out.println("testando o stgtkr "+tx);
			//System.out.println("elemento da pos "+pos+" é "+tx.get(pos));
			pos++;
		}
		for(int i=0;i<ck.length;i++)
		{	if(ck[i][1]!=null)
		{	
			((AbstractButton) ck[i][1]).addActionListener (new ActionListener (){  //inclui o aluno na turma q n estiver cheia

				public void actionPerformed(ActionEvent e)//so exibe as turmas q ainda podem inserir alunos
				{
					System.out.println("dentro da acao do botao");
					for(int i=0;i<ck.length;i++)
						if(((AbstractButton) ck[i][1])==e.getSource())
							System.out.println("antes de chamar o metodo q cria tela d mode");
					crianovatela();//erro so seleciona artes ele n muda o i
				}});
			System.out.println("o elem selecionado "+tx.get(i));
			return tx.get(i);
		}
		}

		return "problema";

	}
e o metodo que cria a tela para cada botao
public void crianovatela()
	{
		JFrame telinha=new JFrame("Tela de modulos");

		try {
			conexao = conecta.conectabanco();
			comando = conexao.createStatement();
		}
		catch(Exception x) {
			JOptionPane.showMessageDialog(null, "Erro na conexÄo do banco");
		}
		try{
			//funciona mas agora pega a ultima posição=[
			btn1.setBounds(20, 180, 50, 15);
			String k=null;

			for(int i=0;i<ret.length;i++)
			{	
				getRet();
				System.out.println("o valor de getret() "+getRet());
				if(ret[i]!=null )
				{
					k=ret[i];
					System.out.println("valor da var ret[i] "+ret[i]+" valor d k "+k+" select modulo from disc_modulo where Id_disciplina='"+k+"'order by modulo");//ta pegando a ultima pos
					//	if(ret[i].equalsIgnoreCase(ck[i][0].toString()))//c ret[i] for igual ao ck selecionado
					resultado = comando.executeQuery("select distinct modulo from disc_modulo where Id_disciplina='"+k+"'order by modulo");
					int q=0;
					while (resultado.next())
					{
						k1[q]=resultado.getObject(1).toString();
						System.out.println("o resultado da pesquisa no banco "+k1[q]+" na pos "+q);
						q++;
					}
					if(k!=null)
					{
						pan=new JPanel();
						pan.setBounds(20,20, 350, 150);
						pan.setBackground(Color.cyan);
						for(int i1=0;i1<j.length;i1++)
						{

							if(k1[i1]!=null)
							{
								j[i1]=new JCheckBox(k1[i1]);
								j[i1].setBounds(x1, y11, 150, 25);
								j[i1].setSelected(true);
								pan.add(j[i1]);
								y11+=30;
								if(i1==3 || i1==8)
								{
									x1=20;
									y11+=30;	
									pan.repaint();

								}
							}
						}
					}
				}

			}
mto obg

6 Respostas

ganondorfan

Seguinte,

Você está construindo o objeto da interface junto da ação do botão, portanto a não ser que você queira executar a ação dentro deste método, recomendo você a separar em uma classe.

Um mini exemplo:

public class acaoBotao extends MouseAdapter {
	
	private String conteudo;
	
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		if (e.getButton() == MouseEvent.BUTTON3) {   
			this.conteudo=JOptionPane.showInputDialog("");
			
		}
		
	}

	public String getConteudo() {
		return conteudo;
	}

	public void setConteudo(String conteudo) {
		this.conteudo = conteudo;
	}
	
	

}

Desta forma você consegue manipular o objeto da ação cometida, para pegar o conteúdo basta dar um getConteudo();
Depende doque você pretende fazer com a mensagem, o jeito mais simples sempre é realizar a ação dentro do objeto ouvinte.

A parte do listener ficaria assim (caso você queira usar a mensagem separada da ação):

acaoBotao ac = new acaoBotao();
this.addMouseListener(ac);  // desta forma o objeto ac fica com a mensagem digitada em uma variavel privada

Novamente, tudo depende doque você pretende fazer com a mensagem.

P

ola ganondorfan,
tipo entao eu crio uma classe para a acao do botao e crio uma instancia dela na classe em que crio os botoes ao inves de uasr akele metodopara criar um joptionpane para cada botao?
é q o q eu qro fazer é salvar o conteudo do joptionpane no banco junto com o texto dos botoes ,na mesma tabela no banco
obg

ganondorfan

Beleza, então você quer é salvar o texto e o nome do botão no banco.

O que você precisa é acionar um objeto DAO para fazer para fazer a inserção, pode inclusive continuar a usar o método anônimo que você já estava utilizando.

Este objeto será responsável por estabelecer a conexão com o banco de dados e realizar a inserção do conteúdo, bastando instanciá-lo dentro do seu método, ou chamá-lo através de uma fábrica.

Como eu havia dito no post anterior, normalmente as ações são executadas dentro da classe que implementa o Listener.

P

ganondorfan
pode me explicar mais sobre este objeto DAO e fabrica?nunca usei isto :oops:
obg

ganondorfan

Você possui algum conhecimento sobre banco de dados?

DAO( Data Access Object) é uma classe que faz a escrita/leitura/deleção no banco de dados para você, normalmente estas classes possuem ou recebem uma conexão com o Banco de Dados e sabem como manipular os objetos de seu negócio.

A Fabrica que eu me refiro, é uma classe que constrói a conexão pra você, ou seja, quando você percebe que demanda muito código para construir um objeto, e você o precisa construir muitas vezes, está é a situação ideal para se construir uma fábrica.

Para você fazer estas operações você vai precisar saber:

*De preferência criar um Bean
*Possuir um banco de dados para hospedar os dados
*Criar o banco, e a(s) tabela necessária
*Criar a classe DAO

Após ter todos estes itens, você vai mexer no seu código atual e torna-lo funcional.

Caso você queira somente persistir alguma informação, tente utilizar a API XStream e salve em um arquivo XML, desta forma você só vai precisar de um Bean e da API, é uma boa forma de praticar a confecção de DAO’s, sem falar que por hora te poupa conhecimentos de SQL e recursos externos.

P

tah tipo a parte de banco de dados conheço alguma coisa,tipo eu tenho um banco pra hospedar os dados e as tabelas la.
so nao usei dao e fabrica eu acho :oops:

Criado 14 de fevereiro de 2011
Ultima resposta 15 de fev. de 2011
Respostas 6
Participantes 2