Botão Fujão

Boa noite!
Estou com uma tarefa bem simples, mas interface gráfica em geral esta me causando certa dor de cabeça.
Eu tenho a seguinte interface
image

Quanto a pessoa clicar em sim este botão deve mudar de local na tela, e quando a pessoa apertar em “Não” irá aparecer uma mensagem “Eu imaginava que você não sabia”

Sendo assim, tenho duas dúvidas.
image
Consegui fazer a mensagem aparecer, mas não sei como formatar ela e deixar o texto maior.

A outra é, como fazer que o botão vá pra um local diferente a cada click

image

Os botões foram criados usando a interface gráfica do NetBeans 12

Obrigado!

Faz um bom tempo desde a ultima vez que mexi com Swing, mas se não me engano você primeiro tem que definir layout como null frame.getContentPane().setLayout(null); e depois você usaria o componente.setBounds(0, 0, 0, 0) que recebe 4 valores. Para esses valores ficarem em posições distintas você pode gerar um numero aleatório para cada valor esperado usando o comando de random de UUID.randomUUID() dentro de um intervalo que respeite o tamanho do seu jFrame.

3 curtidas

Eu usaria o setLocation(x, y) que recebe 2 valores.

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

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

public class BtnAleatorio extends JFrame {
	private static final long serialVersionUID = 1L;
	
	public static void main(String[] args) {
		new BtnAleatorio();
	}
	
	public BtnAleatorio() {
		super("Botão Aleatório");
		
		initComponents();
		
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);
	}

	private void initComponents() {
		setLayout(null);
		
		JButton btn = new JButton("Clique aqui!");
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int x = randomX();
				int y = randomY();
				
				btn.setLocation(x, y);
			}
		});
		btn.setBounds(5, 5, 150, 25);
		add(btn);
	}
	
	private int randomX() {
		return new Random().nextInt(getSize().width - 150);
	}
	
	private int randomY() {
		return new Random().nextInt(getSize().height - 25);
	}
}
1 curtida

Muito obrigado a todos pela ajuda!

Consegui resolver o problema e esclarecer a dúvida.

O setLocation é uma boa também, mas acho o setBounds mais “arbitrário”, visto que é definido 4 posições no plano cartesiano.

O setBounds não recebe 4 posições.
São 2 posições: x e y mais a largura e altura do componente.
Ele é uma alternativa pra quando você quer determinar a posição e o tamanho, aí ao invés de chamar o setLocation e o setSize, você chama ele.

1 curtida