Duvida Swing [Resolvido]

5 respostas
bestlinux

Fala galera,

Estou tentando fazer o seguinte cenario. Tenho uma JTabbedPane. Dentro desta aba, tenho dois campos:

txtServerPort = new JTextField();
txtServerUrl = new JTextField();

Porém, a cada clique no botão “Novo”, crio mais uma aba, com mais dois campos, em outras palavras, faço novamente:

txtServerUrl = new JTextField();
txtServerPort = new JTextField();

Porém, quando clico no botão Salvar, ele sempre vai pegar a o valor do ultima instancia criada de cada campo, isso esta correto. Porém, caso eu tenha 5 abas abertas, e gostaria de editar a 1 Aba, ele NÃO vai pegar o valor do TXT da minha primeira Aba, e sim da ULTIMA aba criada, ou seja, da 5, porque foi a ultima instancia criada.

Gostaria que ele pegasse o valor que digitei na primeira Aba, existe alguma maneira de fazer isso ??

Valeu ! :-o

5 Respostas

fantomas

Não sei se entendi direito o teu problema carinha, mas aqui vai uma ideia em cima do teu tema.

  1. Crie um painel (JPane) que irá representar o conteúdo da aba, ou seja, neste painel haverá os JTextField declarados que vc comentou.
  2. Para cada aba que vc criar, você irá criar também um instancia do painel e irá incluir na aba.
  3. Toda vez que vc selecionar uma aba você terá acesso ao painel que você criou e incluiu.

Pronto, no geral é isso; acho que as chances são grandes de funcionar.

No seu caso, acho que você deixou os JTextField globais porisso que não funciona.

flws

bestlinux

Vale pela resposta, Então cara, mas o problema é o seguinte. Todas estas abas tem um botão Salvar, dentro dele tem a seguinte linha:

server.setPort(Short.parseShort(txtServerPort.getText()));

Ou seja, estou pegando o valor do txtServerPort criado, mas ele sempre pega o ultimo valor da Aba, ou seja, da ultima instancia criada :frowning:

fantomas

Oi!

Transformei o que quiz te dizer em código, para ver se ajuda.

Execute e perceba que eu pego o conteudo adequado de cada aba.

Verifique se vc não está sobreponto os endereços dos objetos das abas. Ex. c = new Cabrito();, c = new Frango();

public class MyTabbedPane extends JFrame {
	private JTabbedPane  tbb = new JTabbedPane ();
	private JButton btnExecute = new JButton("Execute");
	
	public MyTabbedPane() {
		super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		super.getContentPane().add(this.tbb, BorderLayout.CENTER);
		super.getContentPane().add(this.btnExecute, BorderLayout.SOUTH);
		
		this.tbb.add("Server 1", new MyPanel());
		this.tbb.add("Server 2", new MyPanel());
		this.tbb.add("Server 3", new MyPanel());
		
		this.btnExecute.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				execute();
			}
		});
		
		super.setSize(500, 300);
		super.setLocationRelativeTo(null);
		super.setVisible(true);
	}
	
	private void execute() {
		MyPanel p = (MyPanel)this.tbb.getSelectedComponent();
		
		System.out.println(p.getServerPort());
	}
	
	public static void main(String[] args) {
		MyTabbedPane m = new MyTabbedPane();
	}
}
public class MyPanel extends JPanel {
	private JTextField txtServerPort = new JTextField(30);
	
	public MyPanel() {
		super(new FlowLayout());
		super.add(new JLabel("Server Port:"));
		super.add(this.txtServerPort);
	}
	
	public String getServerPort() {
		return this.txtServerPort.getText();
	}
}

flws

bestlinux

Pow cara, matou o meu problema ! :smiley:

Valeu mesmo, funfo aqui ! :-o

Abraços

fantomas

:smiley:

As vezes 1 código também vale mais que mil palavras.

Abraços

Criado 30 de junho de 2009
Ultima resposta 30 de jun. de 2009
Respostas 5
Participantes 2