Problemi con il metodo JButton

di il
12 risposte

Problemi con il metodo JButton

Salve a tutti, stavo compilando un semplice algoritmo di base su piattaforma Java per caricarmi un Frame che contiene una JButton "OK".
Il problema è che non capisco perché quando si apre il JFrame non c'è il JButton.
Ho provato anche a renderlo visibile, ma non appare lo stesso.
Il compilatore che uso non mi da errori, ecco il codice:
import javax.swing.JFrame;
import javax.swing.JButton;
public class MySoft 
{
    public static void main(String[] args) {
        JFrame frame = new JFrame("My Soft");
        frame.setSize(500, 500);
        JButton button1 = new JButton("OK");
        button1.setSize(50, 50);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        button1.setVisible(true);
    }
    
}

12 Risposte

  • Re: Problemi con il metodo JButton

    LightSoul94 ha scritto:


    Il problema è che non capisco perché quando si apre il JFrame non c'è il JButton.
    Ho provato anche a renderlo visibile, ma non appare lo stesso.
    Il JButton l'hai istanziato ma ..... non l'hai aggiunto da alcuna parte!
  • Re: Problemi con il metodo JButton

    Cioè devo dargli le coordinate x, y del bottone?
  • Re: Problemi con il metodo JButton

    Ho rivisto meglio le API code e mi sono accorto che per lavorare ho bisogno della classe Panel... l'ho messa nella mainClass è lo stesso?
    Comunque anche con la classe Jpanel mi da problemi... stavolta il JButton salta fuori, ma occupando tutto il frame. Mi sapete dire perchè? ho messo anche il comando ".setSize"

    Vi mostro il codice:
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    public class MySoft 
    {
        public static void main(String[] args) {
            JFrame frame = new JFrame("My Soft");
            frame.setSize(500, 500);
            JButton button1 = new JButton("OK");
            button1.setSize(50, 50);
            JPanel panel = new JPanel();
            panel.setSize(50, 50);
            frame.getContentPane().add(button1);
            frame.pack();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            button1.setVisible(true);
        }
        
    }
  • Re: Problemi con il metodo JButton

    LightSoul94 ha scritto:


    cioè devo dargli le coordinate x, y del bottone?
    "Nì", la questione è anche un'altra. Vuoi utilizzare i layout manager o il posizionamento "assoluto"? Sono due cose ben diverse. JFrame ha un content-pane (materialmente è un JPanel) che per default ha un BorderLayout.
    Quindi cosa vuoi (anzi, forse è meglio dire cosa sai) fare?
  • Re: Problemi con il metodo JButton

    Per l'appunto ho modificato dopo
    Ho scelto il metodo col JPanel, ma comunque come ho già detto, il bottone mi occupa tutto il frame
  • Re: Problemi con il metodo JButton

    LightSoul94 ha scritto:


    Per l'appunto ho modificato dopo
    Ho scelto il metodo col JPanel, ma comunque come ho già detto, il bottone mi occupa tutto il frame
    Devi ancora comprendere i layout manager:
    Laying Out Components Within a Container


    Puoi anche prendere idee/ispirazione dai miei Java Examples
  • Re: Problemi con il metodo JButton

    E se facessi così?
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    public class MySoft 
    {
        public static void main(String[] args) {
            //**Costruzione del Frame**//
            JFrame frame = new JFrame("My Soft");
            frame.setSize(500, 500);
            //*Creazione del pannello**//
            JPanel pann = new JPanel();
            //**Creazione del bottone**//
            JButton button1 = new JButton("OK");
            //**Inserimento bottone nel pannello**//
            pann.add(button1);
            //**Inserimento pannello con bottone nel frame**//
            frame.add(pann);
            //**Posizionamento pannello**//
            
            //**Impostazione di visibilità degli oggetti**//
            frame.setVisible(true);
            frame.setVisible(true);
            button1.setVisible(true);
            //**Modalità di chiusura del frame**//
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
    }
  • Re: Problemi con il metodo JButton

    LightSoul94 ha scritto:


            JFrame frame = new JFrame("My Soft");
            frame.setSize(500, 500);
            JPanel pann = new JPanel();
            JButton button1 = new JButton("OK");
            pann.add(button1);
            frame.add(pann);
    
    JPanel ha per default un FlowLayout (i componenti possono "fluire" su più righe) che fa stare i componenti al loro preferred size. Quindi il tuo JButton è in alto centrato nel JPanel. E il JPanel è nel CENTER del BorderLayout quindi occupa tutto lo spazio rimanente (tutto in questo caso) del frame.

    Non vorrei sembrarti scortese ma ... davvero, invece di andare a casaccio ... provo così, provo cosà: documentati sui layout manager.
  • Re: Problemi con il metodo JButton

    Va bene grazie
  • Re: Problemi con il metodo JButton

    E se poi hai ulteriori dubbi, chiedi pure!
  • Re: Problemi con il metodo JButton

    Ho risolto, ho usato il Border.Layout, un comando comodissimo, grazie per il link, mi studierò anche gli altri tipi di Layout
    import java.awt.BorderLayout;
    import java.awt.Container;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    public class MySoft 
    {
        public static void main(String[] args) {
            //**Costruzione del Frame**//
            JFrame frame = new JFrame("MySoft");
            frame.setSize(400, 400);
            frame.setLocation(800, 300);
            //*Creazione del pannello**//
            JPanel pann = new JPanel();
            //**Creazione del bottone**//
            Container pane = frame.getContentPane();
            JButton button1 = new JButton("OK");
            //**Inserimento bottone nel pannello**//
            pane.add(button1, BorderLayout.PAGE_END);
            //**Inserimento pannello con bottone nel frame**//
            frame.add(pann);
            //**Impostazione di visibilità degli oggetti**//
            frame.setVisible(true);
            frame.setVisible(true);
            button1.setVisible(true);
            //**Modalità di chiusura del frame**//
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
    }
    ciao!
  • Re: Problemi con il metodo JButton

    LightSoul94 ha scritto:


    Ho risolto, ho usato il Border.Layout
    Ci sono comunque cose che non quadrano/non servono. Hai un JPanel pann che inserisci nell'area CENTER del BorderLayout del content-pane ma questo JPanel è vuoto!
    Poi usi add() sia sul frame direttamente, sia sul content-pane.

    Da Java 5 in poi, fare:
    unJframe.add( ... )
    è esattamente equivalente a fare:
    unJframe.getContentPane().add( ... )

    Prima di Java 5 era sbagliato fare solo add() direttamente su un JFrame.

    Poi fai un setVisible sul frame 2 volte (ovviamente basta uno). E fai un setVisible(true) sul pulsante, che non serve: tutti i componenti Swing (esclusi i componenti "top-level", finestre, dialog) sono già visibili per default.

    Cerca di vedere/capire Swing un po' più in generale.
Devi accedere o registrarti per scrivere nel forum
12 risposte