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
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.
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
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