JButton dentro de um JTextFiedl

Galera estou tentando implemnetar um JTextField, e estou querendo colocar um botao dentro a area do testo, alguem pode me da um help de como fazer isso

Hum… JTextField não é container! Acho que não tem como fazer isso não… Mas, por curiosidade: Pra que voc quer fazer isso!?

Falou!

[quote=cassio]Hum… JTextField não é container! Acho que não tem como fazer isso não… Mas, por curiosidade: Pra que voc quer fazer isso!?
Falou![/quote]

Eh para 2 ideias bem comum, uma eh para quando clicar nesse botao, abrir um “janela” para escolher a data alem de digitar, e a outra eh pra quando tiver erro naquele campo e ao clicar esse botao irar aparecer uma janela dizendo o erro.

O botao q estou querendo dizer eh um parecido com o do JSpinner. aquelas setinha pra cima e para baixo, soh q eh soh um botao q to querendo colocar!!

Ae mano, se souber de algo q da pra mim ajudar eu agradeço muito

Amigo, assim eu acho muito complicado hein!? Porque vc nao abre essa sua janela simplesmente quando o usuario posicionar o cursor (foco) no JTextField?!
Pesquise sobre FocusEvent e adicione um evento que vai acionar sua janela, caso necessário, assim que o JTextField receber o focus…

Falou!

Ae cassio boa ideia, desculpa ae mas eu nao vo deisti de coloca um botao la nao pq eh o eu precizo msm, e tb isso eu irei ultilizar dentro de uma celular de um JTable(bem mais complicado, ehhehehehe), a ideia do focus eh boa sim, vlws aee! A medida q eu irei descubrindo como fazer isso eu o posta aki!!

Vlws amigo!!!

hmm, você pode colocar os dois componentes, o text e o button, dentro de um JPanel, será que não serviria?

flw

dudaskank vlws pela ajuda, no momento eu estou fazendo isso, mas eu considero isso uma “gambiarra”, nao estou criticando, mas tento buscar tentar faz as coisas mais cerpas possivel, eu sei, estou querendo d+ ehhehhhhhehhe

Mas vlws pela ajuda galera, vou continuar procurando

[quote=dudaskank]você pode colocar os dois componentes, o text e o button, dentro de um JPanel, será que não serviria?
[/quote]

:idea: Eu fazia um pouco disto em Delphi,então resolvi tentar em Java.

  1. Aqui com NetBeans, criei um novo form do tipo JPanel.

  2. Redimensionei-o , adicionei um textfield , alguns botões e acertei os anchor e o layout.

  3. Compilei esta classe.

  4. No NetBeans , clico com o botão direito sobre a classe e mando “Add to Pallet”. Bingo… tenho um componente visual aqual posso adicionar aos forms ( JFrame , JDialog) ou instanciá-la manualmente.

A princípio dvidei que isto funcionasse corretamente , mas resolvi aumentar a complexidade do componente e adicionei alguns atributos privados text , label , seus setter e getter e ainda os metodos hasError , hasLoad , hasOutroBotao.

:shock: O Netbeans adicionou automaticamente estes atributos na janelinha de propriedades do componente.

Agora ficou assim :

SuperTextField  s = new SuperTextField();
s.setText("qualquer coisa");
s.hasError( true );
s.hasLoad( false );
s.hasOutroBotao( true );

:smiley: Agora sim posso dizer que encontrei uma coisa interessante…


cara, vc poderia fornecer pro pessoal o código dessa classe, quem desenvolve, aplicaçoes comerciais sente dificuldades em encontrar componentes assim
Vlw

olá amigo segue o código

this.txtNome.setLayout(new BorderLayout( )); this.txtNome.add("East",btn);
pronto ta colocado no JTextField :wink:

desculpa btn seria o botao

Acho que devia dar uma vista de olhos a API do JTextField

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JTextField.html

Luiz, acho que você se enganou aí cara. Dá uma olhada na API do JText field como o Ehb falou. Olhe a hierarquia de classes dele. O JTextField também herda da classe Container.

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class JButtonTextField {
	public static void main(String[] args) {
		JFrame frame = new JFrame("JButtonTextField");
		JTextField field = new JTextField(30);
		JButton button = new JButton("Button");
		field.setLayout(new BorderLayout());
		field.add(button,BorderLayout.EAST);
		field.setText("JButtonTextField");
		frame.getContentPane().add(field);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				Component parent = ((JButton)event.getSource()).getParent();
				((JTextField)parent).setText("Button Pressed");
			}
		});
	}
}

Era exatamente o que eu precisava. Obrigado!

Opa pessoal eu testei esse recurso de herança visual no netbeans e funciona mas há um problema a IDE não identifica a modificação no componente de visualização rápida, apenas é visivel quando o código é copilado agora é esperar o pessoal melhorar a IDE para que ela seja inteligente o suficiente para entender a mudança e fazer automaticamente falou pessoal.

Greetings.

Cara, o que tu ta querendo é semi-impossível. Veja porque:

JTextField é um componente, nao um container; e você só pode colocar componentes dentro de containers!

Uma solucao seria implementar uma sublcasse de JTextField (talvez chamasse de ButtonTextField), e nela implementasse alguma das funcionalidades de um container ou mesmo de um botão.

Outra solução seria colocar o seu textField num JPanel, pôr o botão logo ao lado do campo de texto, remover as bordas do JTextField ( setBorder(null) ), colocar bordas no JPanel e mudar a cor do fundo dele para que fique igual à do JTextField. Todo mundo vai ter a impressão de estar vendo um campo de texto com um botão dentro; quando, na verdade, será um painel enfeitado.

E se você achar que essa última é uma gambiarra, então imlpemente essa solução dentro de uma nova classe ( TextButtonField extends JPanel ) e usa objetos dessa nova classe. Aí deixa de ser gambiarra. :slight_smile: :slight_smile: :slight_smile:

Mas uma coisa é certa: você só pode colocar componentes dentro de Containers, e JTextField não é um container.

Espero ter ajudado.
Boa sorte.

Ih! Tem razão! Foi mal… :lol:

Mas a sugestão de fazer uma subclasse de JTextField continua de pé.

Boa sorte.