Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [Java] Swing layout

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    70

    [Java] Swing layout

    Ciao a tutti,
    sto imparando a costruire interfacce grafiche con Swing, ma purtroppo non riesco ancora a produrre i risultati desiderati: vorrei creare una finestra composta da due JPanel; il primo avrà come layout un FlowLayout in cui inserirò bottoni in sequenza, il secondo invece sarà un pannello contenente un JEditorPane!!!! Il mio problema è che quando aggiungo i 2 JPanel() al Frame, questi si dividono esattamente a metà il Frame... Io, invece, vorrei che il pannello più in alto (quello col Flow Layout) sia molto più piccolo (in termini di altezza) rispetto al secondo pannello (insomma, per capirci, come un browser che ha un pannello in alto con i pulsanti e tutto il resto della finestra è utilizzato per visualizzare le pagine web!!!!)! Ho provato con i vari metodi setSize() ecc... ma senza successo!!!!!!!!!

    Qualcuno mi sà aiutare?!?!?!?!?!?

    Spero di essere stato chiaro!!!!!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    I JFrame, come tutti (o quasi) i componenti Container di Swing hanno per default un layout di tipo BorderLayout (o GridLayout).

    Se vuoi mettere i controlli dove vuoi tu puoi usare una tecnica, secondo me, molto efficace:

    - Settare il layout del Container (JFrame, JPanel, ...) a null
    - Impostare posizione e dimensioni dell'oggetto che vuoi aggiungere
    - Aggiungerlo.

    In questo modo avrai il pieno controllo dello spazio del tuo Container. Un esempio per capire:
    codice:
    public class MioFrame extends JFrame {
       private JPanel jp;
       private JTextPane jtp;
       public MioFrame() {
          getContentPane().setLayout(null); //tolgo il LayoutManager predefinito
          jtp = new JTextPane();
          jtp.setBounds(0, 0, 300, 100); // Imposto posizione e dimensione del mio JTextPane
          jp = new JPanel();
          jp.setBounds(0, 101, 300, 199); // Imposto posizione e dimensione del mio JPanel
          setSize(300, 300); // Imposto la dimensione della finestra
          getContentPane().add(jtp);
          getContantPane().add(jp);
          show();
       }
       ... // Altri metodi
    }
    La sintassi del metodo setBounds è la seguente:
    setBounds(int posizioneX, int posizioneY, int larghezza, int altezza);

    posizioneX è la posizione orizzontale dell'angolo superiore sinistro del tuo oggetto da inserire

    posizioneY è la posizione verticale dell'angolo superiore sinistro del tuo oggetto da inserire

    larghezza e altezza sono le dimensioni del tuo oggetto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    70
    Ciao,

    ora ho capito perfettamente!!!!! Grazie 1000 per il consiglio!!!!!

  4. #4
    impostare il layout a null e sistemare "a mano" i componenti va contro la filosofia java.... a sto punto tanto vale utilizzare visual basic !
    Evitare LayoutManagers può sembrare comodo all'inizio, ma si rivela inefficente quando devi aggiungere componenti al frame o quando devi cambiare la loro disposizione. Pensa solo all'utente che ridimensiona la finestra... funzione che nn è il caso di inibire in un browser!!

    Tornando al tuo problema si risolve molto semplicemente con un pannello di appoggio con il borderlayout (è facoltativo, io lo uso sempre per comodità)
    codice:
      JPanel contentPane = new JPanel(new BorderLayout());
      contentPane.add( buttonPanel, BorderLayout.NORTH); // o SOUTH , dipende da dove vuoi i tasti. 
      contentPane.add( new JScrollPane(ilTuoJEditorPane), BorderLayout.CENTER);
      this.setContentPane(contentPane);
      this.setSize(new Dimension (.... quello che vuoi ... ) );
      this.show();
    in questo modo il LayoutManager dispone il pannello dei tasti in una riga in alto nella finestra, occupando solamente lo spazio necessario. Tutto l'area rimanete (CENTER) viene quindi riempita dal JEditorPane, inserito in questo caso in uno scroll panel.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    70
    Ciao Popper,

    grazie anche a te!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Originariamente inviato da Popper
    [B]impostare il layout a null e sistemare "a mano" i componenti va contro la filosofia java.... a sto punto tanto vale utilizzare visual basic !
    Evitare LayoutManagers può sembrare comodo all'inizio, ma si rivela inefficente quando devi aggiungere componenti al frame o quando devi cambiare la loro disposizione. Pensa solo all'utente che ridimensiona la finestra... funzione che nn è il caso di inibire in un browser!!
    Voglio vederti ad utilizzare un BorderLayout o cose simili per produrre una finestra con una scritta ed un pulsante... Esteticamente FA SCHIFO, ma tutto sommato può risultare divertente.

    Riguardo al fatto che vada contro la filosofia Java... mi domando dove te la sei inventata questa! Programmare ad oggetti non significa perdere in manegevolezza...

    Per il fatto di dover ridisporre gli oggetti quando si fa un resize di una finestra... io, personalmente, non l'ho mai (e sotto lineo MAI) trovato difficoltoso.

    Per ultimo... non vedo cosa c'entri VB: in C++ o Delphi come ti comporti, visto che non hai i JayoutManagers?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.