Como dá ação para o botão junto com o JTextField e como criar outras bolas aleatoriamente?

Boa noite pessoal, estou com um problema…No código abaixo eu criei um JTextField e um botão “Criar Bolinhas”, para o usuário digitar no campo do JTextField o número de bolinhas que ele deseja incluir e posteriormente clicando no botão “Criar Bolinhas” as bolinhas aparecer na tela em CONDIÇÕES ALEATÓRIAS. Mas como é que eu faço isso? Essa parte de relacionar o que o usuário escreveu no JTextField com o botão. Obrigado.
Aqui está a classe Bola

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

/**
 * @author Alisson A classe bola é um componente para ser pintada em qualquer
 *         janela. A bola controla sua posição e orientação em relação a janela
 *         que estiver sendo pintada. @direitos reservados
 */

public class Bola extends JPanel {
	
	private int x = 50, y = 150, direcaoX = 1, direcaoY = 1, tamanho = 30;
	private int ALTURA = 360; // Limite da janela (igual do JogoPainel)
	private int LARGURA = 400; // Limite da janela (igual do JogoPainel)
	private Color cor = Color.WHITE; // Cores para a bolinha (WHITE, GREEN,
										// BLACK, BLUE, RED)

public Bola(int x, int y, int direcaoX, int direcaoY) {
		super();

		// Usando os metodos set para testar os limites dos valores
		this.setX(x);
		this.setY(y);
		this.setDirecaoX(direcaoX);
		this.setDirecaoY(direcaoY);
	}

public Bola() {}

public void paintComponent(Graphics g) {
		super.paintComponent(g); // Pinta o fundo da tela
		g.setColor(cor); // Cor da bola
		g.fillOval(x, y, tamanho, tamanho); // Pinta a bola nas posições x e y
											// Com largura e altura.
 }

public void moveBola() {
		// Trata os limites da tela
		if (x >= LARGURA - tamanho) {
			direcaoX = -1;
		} else if (x <= 0) {
			direcaoX = 1;
		}

		if (y >= ALTURA - tamanho) {
			direcaoY = -1;
		} else if (y <= 0) {
			direcaoY = 1;
		}

		x += direcaoX; // Acrescenta 1 ou -1 conforme valor da direção
		y += direcaoY; // Acrescenta 1 ou -1 conforme valor da direção
	}

	public int getX() {
		return x;
	}
	
	public void setX(int x) {
		if (x < LARGURA + tamanho) {
			this.x = x;
		}
	}
	
	public int getY() {
		return y;
	}

	
	public void setY(int y) {
		if (y < ALTURA + tamanho) {
			this.y = y;
		}
	}

         public int getDirecaoX() {
		return direcaoX;
	}

	public void setDirecaoX(int direcaoX) {
		if ((direcaoX == 1) || (direcaoX == -1)) { // '||' == 'ou' == 'or'. '&&'
													// == 'e' == 'and'
			this.direcaoX = direcaoX;
		}
	}

	public int getDirecaoY() {
		return direcaoY;
	}

	public void setDirecaoY(int direcaoY) {
		if ((direcaoX == 1) || (direcaoX == -1)) {
			this.direcaoY = direcaoY;
		}
	}

	
	public int getTamanho() {
		return tamanho;
	}

	public void setTamanho(int tamanho) {
		if ((tamanho < ALTURA) && (tamanho < LARGURA)) {
			this.tamanho = tamanho;
		}
	}

	public int getALTURA() {
		return ALTURA;
	}

	public void setALTURA(int aLTURA) {
		ALTURA = aLTURA;
	}

	
	public int getLARGURA() {
		return LARGURA;
	}

	public void setLARGURA(int lARGURA) {
		LARGURA = lARGURA;
	}

	public Color getCor() {
		return cor;
	}

	
	public void setCor(Color cor) {
		this.cor = cor;
	}
	

}

E aqui a classe JogoPainel

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
/**
 * @author Alisson Classe que desenha a janela do jogo. Necessária para pintar
 *         os objetos que serão acrescentados na janela.
 * 
 */
public class JogoPainel extends JPanel implements Runnable {  //Implements ActionListener   
	public JButton botao,button; //
	public JTextField campo;
	private static final int LARGURA = 400; // Largura da janela
	private static final int ALTURA = 400; // Altura da janela
	private Thread animacao; // Controla a chamada de run
	private int tempoEspera = 12; // Tempo entre uma pintura da tela e outra
	private boolean rodando = true; // Define se está ou não rodando
	Bola bola = new Bola(30, ALTURA - 30, 1, 1); // Cria a bola
public JogoPainel() {
		setBackground(Color.BLACK);
		setLayout(new BorderLayout());
		setPreferredSize(new Dimension(LARGURA, ALTURA));
		campo = new JTextField(10);
		botao = new JButton("Play/Pause"); //Cria um botao @2B
		botao.addActionListener(new ActionListener(){ //Dá ação ao botão @2B
//botao "play/pause";
public void actionPerformed(ActionEvent e){
	// Determina que quando pressionado o botao, ele executará uma ação
	if(rodando){  
		rodando=false; 
	}else { 
		rodando=true;
	}
}
});
//botao criar bolinhas
	button = new JButton("Criar Bolinha");
	button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
  //implementação     
}
});

//Adiciona os botoes ao painel
JPanel painel = new JPanel(); //Cria um painel @author 2B
painel.add(botao, BorderLayout.SOUTH);
painel.add(button, BorderLayout.SOUTH); //Adiciona o botao ao painel na parte Sul da tela @2B
painel.add(campo, BorderLayout.SOUTH);
add(painel, BorderLayout.SOUTH); //Adiciona o painel na parte Sul da tela @2B
}
	
	/*
	 * Quando a janela aparece (addNotify) chama iniciarJogo
	 */
public void addNotify() {
		super.addNotify();
		iniciarJogo();
	}

private void iniciarJogo() {
		if (animacao == null || !rodando) {
			animacao = new Thread(this);
			animacao.start();

		}
	}

	/*
	 * Roda a animação da bola
	 */
public void run() {

		while (true) { // loop do jogo para sempre
			if (rodando) {
					bola.moveBola(); // Chama para mover a bola
					repaint(); // Pede para repitar a bola
			}
					try { // Inicia o tratamento de evento(erro)
					Thread.sleep(tempoEspera);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		}
	}
	

	/*
	 * Pinta a tela (super) e os componentes (bolas)
	 */
public void paintComponent(Graphics g) {
		super.paintComponent(g); // Repinta a tela
		bola.paintComponent(g); // Repinta os componentes
	}
public static void main(String args[]) {
	  	JogoPainel jogoPainel = new JogoPainel(); // Cria a janela JogoPainel;
		JFrame jogo = new JFrame("Tutorial"); // Cria a moldura
		jogo.add(jogoPainel); // Adicina a moldura jogo a janela jogoPainel
		jogo.pack(); // Alinha a janela na moldura
		jogo.setVisible(true); // Torna a janela visível.
		// Fecha o programa ao clicar no x da janela
		jogo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

Você simplesmente vai ler o conteúdo do JTextField quando o usuário clica no botão Criar Bolinhas. Pra isso, na sua implementação do ActionListener (no método actionPerformed), vai fazer algo do gênero:

public void actionPerformed(ActionEvent e){ 
   Integer quantidadeDeBolinhas = Integer.parseInt(campo.getText()); //convertendo para inteiro ja

   // Crie as bolinhas conforme necessário
}

Se entendi bem, sua dúvida é esta.

No caso esse “quantidadeDeBolinhas” eu teria que definir ele lá em cima na class JogoPainel ?

Voce teve ser bem iniciante para naum entender o que nosso colega postou

essa varivel foi criada dentro do metodo que seu botao deveria chamar, e essa quantidadeDeBolinhas é o valor que usuario informou no textField meu amigo

Desculpa “amigo”, mas realmente eu começei a estudar Java tem pouco tempo, e esse é um desafio que o nosso professor passou pra gente tentar fazer. Desculpa ai.

Blz, Obrigado “wagnerfrancisco”. E no caso como é que eu faria pra criar essas bolinhas em condições iniciais aleatórias? Eu sei que tem que utilizar o Random, mas não sei como, achei ele meio complexo. :S

Vendo de maneira meio superficial o seu código, pelo que entendi, somente ao clicar no botão “button” é que você deveria instanciar os objetos Bola. Nele você vai passar valores aleatórios para x e y. É bem simples com a classe Random:

Random random = new Random();
int x = random.nextInt(11); //gera um numero aleatorio de 0 a 10
int y = random.nextInt(21); //gera um numero aleatorio de 0 a 20

Ou seja, ao clicar no “button” (lá no actionPerformed) você cria as bolinhas e passa estes números. No caso, ao invés de gerar de 0 a 20, você vai gerar de acordo com o espaço das bolinhas.

Obrigado Wagner, consegui aqui. :smiley: