Descobrir a posição de um objeto em um JFrame

Primeiramente, boa noite a todos.

Eu sei que a minha pergunta é ridicula, mas eu como “noob” (estou no 2º periodo da facu) neste muno de programação (principalmente java) estou com uma enorme dificuldade de conseguir fazer esta questão que o prof da faculdade passou.

Meu problema é o seguinte:

Preciso fazer um programa que leia 4 numeros e ao final imprima na tela a soma do 1º pelo 3º e do 2º pelo 4º e para isto, preciso utilizar a interface grafica.

Já criei o codigo e eu acho que está certo em parte mas pesquisando o porque de não imprimir o resultado de maneira alguma, me disseram que o erro estava em eu não informar a ordem dos obtejos dentro do getComponent(). Sinceramente não entendi muito o que significaria isto e pesquisando mais um pouco vi que seria algo tipo como informar a posição do objeto no frame como se fosse um vetor ou um array. Desculpem se eu estiver falando besteira, mas foi isso que eu entendi porém, não consegui desenvolver mais nada apartir dali.

Como eu faço para identificar a posição destes objetos…e o que estou fazendo de errado?

Segue abaixo meu codigo.

[code]Pacote modelo
package modelo;

public class Numeros {

private int num1,num2,num3,num4;

public Numeros() {
	super();
	}

public Numeros(int num1, int num2, int num3, int num4) {
	super();
	this.num1 = num1;
	this.num2 = num2;
	this.num3 = num3;
	this.num4 = num4;
}

public int getNum1() {
	return num1;
}

public void setNum1(int num1) {
	this.num1 = num1;
}

public int getNum2() {
	return num2;
}

public void setNum2(int num2) {
	this.num2 = num2;
}

public int getNum3() {
	return num3;
}

public void setNum3(int num3) {
	this.num3 = num3;
}

public int getNum4() {
	return num4;
}

public void setNum4(int num4) {
	this.num4 = num4;
}
public int getCalcular1() {
	return num1 + num2;
}
public int getCalcular2() {
	return num3 + num4;

}
}

Pacote controle

package controle;

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

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import modelo.Numeros;

public class Controle implements ActionListener {
private JFrame visao;
private JTextField txtnum1;
private JTextField txtnum2;
private JTextField txtnum3;
private JTextField txtnum4;
private JTextField txtsoma1;
private JTextField txtsoma2;
private JPanel painel;
private Numeros numeros;

public Controle(JFrame visao) {
	super();
	this.visao = visao;
}

private void calcular() {
	numeros = new Numeros();
	numeros.setNum1(Integer.parseInt(txtnum1.getText()));
	numeros.setNum2(Integer.parseInt(txtnum2.getText()));
	numeros.setNum3(Integer.parseInt(txtnum3.getText()));
	numeros.setNum4(Integer.parseInt(txtnum4.getText()));
	txtsoma1.setText(Integer.toString(numeros.getCalcular1()));
	txtsoma2.setText(Integer.toString(numeros.getCalcular2()));
}

@Override
public void actionPerformed(ActionEvent aux) {
	painel = (JPanel) visao.getContentPane();
	txtnum1 = (JTextField) painel.getComponent(7); //Como saber a posição de txtnum1 e os demais???
	txtnum2 = (JTextField) painel.getComponent(8);
	txtnum3 = (JTextField) painel.getComponent(9);
	txtnum4 = (JTextField) painel.getComponent(10);
	txtsoma1 = (JTextField) painel.getComponent(11);
	txtsoma2 = (JTextField) painel.getComponent(12);
	if (aux.getActionCommand() == "Calcular") {
		calcular();
	}

}

}

Pacote Visão
package visao;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JButton;

import controle.Controle;

public class TelaNumeros extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JLabel lblnum1 = null;
private JLabel lblnum2 = null;
private JLabel lblnum3 = null;
private JLabel lblnum4 = null;
private JLabel lblsoma1 = null;
private JLabel lblsoma2 = null;
private JTextField txtnum1 = null;
private JTextField txtnum2 = null;
private JTextField txtnum3 = null;
private JTextField txtnum4 = null;
private JTextField txtsoma1 = null;
private JTextField txtsoma2 = null;
private JButton btnCalcular = null;

private Controle controle = null;
public TelaNumeros() {
	super();
	initialize();
	controle = new Controle(this);
}
private void initialize() {
	this.setSize(442, 343);
	this.setContentPane(getJContentPane());
	this.setTitle("JFrame");
}
private JPanel getJContentPane() {
	if (jContentPane == null) {
		lblsoma2 = new JLabel();
		lblsoma2.setBounds(new Rectangle(141, 229, 164, 16));
		lblsoma2.setText("Resultado da segunda soma:");
		lblsoma1 = new JLabel();
		lblsoma1.setBounds(new Rectangle(142, 179, 163, 16));
		lblsoma1.setText("Resultado da primeira soma:");
		lblnum4 = new JLabel();
		lblnum4.setBounds(new Rectangle(272, 102, 58, 16));
		lblnum4.setText("4º numero");
		lblnum3 = new JLabel();
		lblnum3.setBounds(new Rectangle(272, 36, 58, 16));
		lblnum3.setText("3º numero");
		lblnum2 = new JLabel();
		lblnum2.setBounds(new Rectangle(26, 102, 58, 16));
		lblnum2.setText("2º numero");
		lblnum1 = new JLabel();
		lblnum1.setBounds(new Rectangle(26, 36, 58, 16));
		lblnum1.setText("1º numero");
		jContentPane = new JPanel();
		jContentPane.setLayout(null);
		jContentPane.add(lblnum1, null);
		jContentPane.add(lblnum2, null);
		jContentPane.add(lblnum3, null);
		jContentPane.add(lblnum4, null);
		jContentPane.add(lblsoma1, null);
		jContentPane.add(lblsoma2, null);
		jContentPane.add(getTxtnum1(), null);
		jContentPane.add(getTxtnum2(), null);
		jContentPane.add(getTxtnum3(), null);
		jContentPane.add(getTxtnum4(), null);
		jContentPane.add(getTxtsoma1(), null);
		jContentPane.add(getTxtsoma2(), null);
		jContentPane.add(getBtnCalcular(), null);
	}
	return jContentPane;
}
private JTextField getTxtnum1() {
	if (txtnum1 == null) {
		txtnum1 = new JTextField();
		txtnum1.setBounds(new Rectangle(102, 36, 48, 20));
	}
	return txtnum1;
}
private JTextField getTxtnum2() {
	if (txtnum2 == null) {
		txtnum2 = new JTextField();
		txtnum2.setBounds(new Rectangle(347, 36, 48, 20));
	}
	return txtnum2;
}
private JTextField getTxtnum3() {
	if (txtnum3 == null) {
		txtnum3 = new JTextField();
		txtnum3.setBounds(new Rectangle(102, 100, 48, 20));
	}
	return txtnum3;
}
private JTextField getTxtnum4() {
	if (txtnum4 == null) {
		txtnum4 = new JTextField();
		txtnum4.setBounds(new Rectangle(347, 100, 48, 20));
	}
	return txtnum4;
}
private JTextField getTxtsoma1() {
	if (txtsoma1 == null) {
		txtsoma1 = new JTextField();
		txtsoma1.setBounds(new Rectangle(179, 203, 88, 20));
	}
	return txtsoma1;
}
private JTextField getTxtsoma2() {
	if (txtsoma2 == null) {
		txtsoma2 = new JTextField();
		txtsoma2.setBounds(new Rectangle(183, 253, 81, 20));
	}
	return txtsoma2;
}


private JButton getBtnCalcular() {
	if (btnCalcular == null) {
		btnCalcular = new JButton();
		btnCalcular.setBounds(new Rectangle(183, 141, 81, 26));
		btnCalcular.setText("Calcular");
		btnCalcular.addActionListener(controle);
	}
	return btnCalcular;
}

}

[/code]

Desde já agradeço pelo auxilio.

Cara vc tem que fazer a interface toda na “unha”? eu desenharia os textfields no netbeans, depois colocaria um com o resultado tipo:

Até +

Boa Tarde
Não recrie os componentes gráficos na sua classe de eventos “Controle”, ao inves disto crie um objeto do tipo Visão dentro da sua classe “Controle” e trabalhe com os componentes desta classe através dos Getters(Altere na classe “Visão” os Getters para public para que possam ser acessados de outra classe).

No método calcular da classe “Controle” para todos os componentes que deseja trabalhar faça algo assim:

//ObjDaClasseVisao.getTxtnum1() retorno o componente txtnum1 da classe Visão numeros.setNum1(Integer.parseInt(ObjDaClasseVisao.getTxtnum1().getText()));
e no actionPerformed chame o apenas o método calcular

@Override  
public void actionPerformed(ActionEvent aux){  
     calcular();  
}  

Po pessoal, valew mesmo.

Eu não precisava fazer na unha, mas estou tentando aprender assim (inclusive utilizando JCreator) pq eu não entendo nada de Java e to me aventurando agora. Pesquisei mais a fundo essa dica do Daniel e entendi o que ele quis dizer. Fiz algumas alterações no codigo e funcionou…muito obrigado mesmo.

Abs

Carlos Guerra