Automatizar instancia de JButtons e outros objetos

olá a todos, tava aqui estudando/treinando com java swing, tava fazendo um menu onde supostamente haverá vários botões, então criei uma classe para os botões, dai surgiu a duvida, para cada botão criado eu teria q instanciar a classe do botões setar o texto e a posição onde ele vai ficar, o que eu queria saber é como eu poderia fazer para setar automaticamente a posição já que a ideia é que fiquem alinhados podendo alternar entre vertical ou horizontal com um pequeno espaço entre eles, tipo, ou todos vertical ou todos horizontal, e como instanciar todos de uma vez sem ter q instanciar um por um, tava pensando em tipo um array contendo os textos de cada botão e dai fazer um loop mas não sei exatamente como faz isso em java

fiz 3 classes para o teste atual vou por o código a baixo:

classe principal:

package visual;

import utilitarios.Tamanhos;

public class FrameGeral extends javax.swing.JFrame{

	private static final long serialVersionUID = 1L;
	
	Tamanhos tam = new Tamanhos();
	Botoes btnMenu = new Botoes(1);
	
	public FrameGeral() {
		this.setSize(tam.tamanhoTela());
		this.setLayout(null);
		this.add(btnMenu);
	}
	
	public static void main(String[] args) {
		new FrameGeral().setVisible(true);
	}
}

classe que define tamanhos:

package utilitarios;

import java.awt.Dimension;
import java.awt.Toolkit;

public class Tamanhos {

	public Dimension tamanhoTela() {
		Toolkit kit = Toolkit.getDefaultToolkit();  
		Dimension tamTela = kit.getScreenSize();
		return tamTela;
	}
	
	public Dimension tamanhoBtn(double pctBtn) {
		int larg = (int) (pctBtn * largura);
		int alt = (int) (pctBtn * altura);
		
		if(larg > 300) {
			larg = 300;
		}
		
		if(alt > 50) {
			alt = 50;
		}

		Dimension tamBtn = new Dimension(larg,alt);

		return tamBtn;
	}
	
	private int largura = tamanhoTela().width;
	private int altura = tamanhoTela().height;
}

classe dos botões:

package visual;

import java.awt.Color;

import utilitarios.Tamanhos;

public class Botoes extends javax.swing.JButton {

	private static final long serialVersionUID = 1L;
	
	Tamanhos tam = new Tamanhos();
	
	public Botoes(int tipo) {
		this.setSize(tam.tamanhoBtn(0.3));
		this.setLayout(null);
		defineLayout(tipo);
	}
	
	private javax.swing.JButton defineLayout(int tipo){
		switch(tipo) {
		case 0: 
			this.setBackground(new Color(0,0,0));
		case 1:
			this.setBackground(new Color(255,0,45));
		}
		return this;
	}
}

Eu vou fazendo as coisas e tendo novas ideias logo em seguida mas sou iniciante no java e não sei fazer muita coisa kkk então se tiverem alguma dica sobre o código atual ficarei grato em saber :slight_smile:

Não importa como você faça, no final, sempre terá um

new JButton();

Ou uma de suas variações;