Le interfacce grafiche in Java richiedono la conoscenza del meccanismo di funzionamento delle GUI. Ci sono concetti che non possono essere tralasciati. Swing, in particolare, ha diversi aspetti che bisogna conoscere bene (EDT = Event Dispatching Thread in primis).
Per quanto riguarda la gestione del posizionamento e del dimensionamento dei componenti all'interno dei contenitori entra in gioco uno dei componenti più importanti (introdotto fin dagli albori di AWT): il LayoutManager.
Consiglio di documentarsi partendo magari da qui: https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html
Il LayoutManager è il componente preposto a gestire posizionamento e dimensionamento dei componenti. LayoutManager diversi posizionano e modellano i componenti in modo diverso.
Si può anche dire ad un contenitore di non utilizzare nessun LayoutManager: in questo caso ci si deve occupare in prima persona del posizionamento e del dimensionamento dei componenti al suo interno, tenendo conto del possibile ridimensionamento della finestra da parte dell'utente.
Perchè il pulsante che hai aggiunto al JPanel non rispetta le dimensioni che tu gli hai dato con setBounds()? Perchè JPanel utilizza, di default, un LM (abbrevio LayoutManager): il FlowLayout. E' lui a decidere dove mettere il tuo pulsante e che dimensione deve avere.
Se vuoi dire al tuo pannello di posizionare e dimensionare il pulsante come vuoi tu, allora devi "rimuovere" il suo LM:
pannello.setLayout( null );
Attenzione: anche il JFrame a cui hai aggiunto il pannello ha un suo LM: di default viene usato il BorderLayout (e, di conseguenza, l'aggiunta dei componenti non andrebbe fatta in quel modo).
Qui un esempio di costruzione di una finestra (molto minimale):
// Istanziazione della finestra
JFrame frame = new JFrame();
frame.setTitle("Titolo");
frame.setSize(LARGHEZZA, ALTEZZA);
frame.setLocationRelativeTo( null ); // Posiziona al centro dello schermo
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, ...
// Istanziare i componenti
JPanel pannello = new JPanel();
pannello.setLayout( null ); // Non voglio il LM nel pannello
JButton button = new JButton("Pulsante");
button.addActionListener(e -> { ... } );
button.setBounds( ... );
// Aggiungo i componenti ai loro contenitori
pannello.add( button );
Container c = frame.getContentPane(); // Ottengo il contenitore corretto della finestra
c.add(pannello, BorderLayout.NORTH); // Aggiungo il pannello IN ALTO (nel NORD)
// Solo alla fine
frame.setVisible( true );
Studia bene l'ambiente Swing perchè ci sono moltissimi aspetti di cui tenere conto.