Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    [Java] resize automatico elemento swing

    Allora, ho un'interfaccia grafica in cui è presente una JTextArea con una size proporzionata alla size della frame, almeno inizialmente... praticamente non vorrei impedire il resize della finestra, quindi come faccio a impostare un resize automatico della textArea in base al rapporto che ho impostato all'inizio, ogni volta che l'utente cambia le dimensioni della finestra?
    grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Visto che non hai usato un LayoutManager (che è sempre e comunque la via migliore), dovrai registrare un ComponentListener nella finestra in modo che, quando viene notificata del resize, vada ad impostare la nuova dimensione in tutti i componenti che necessitano di essere ridimensionati.

    In buona sostanza, devi fare tu il lavoro sporco che un LayoutManager farebbe per te.


    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
    Oct 2011
    Messaggi
    347
    puoi spiegarti un po meglio? sono nuovo alla programmazione di interfacce grafiche XD comunque non ho usato un layout m. perche la mia gui è impostata così: alla Jframe ho lasciato il border layout quindi ho inserito i vari pannelli che mi servivano tra cui quello che contiene la text area al centro della JFrame (BorderLayout.CENTER)... non so utilizzare un gridbag layout, ma qualche cosa di base con i Layout Manager so farla.
    Quindi qual'è la strada migliore?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    BorderLayout è un LayoutManager... è il più conosciuto e puoi settarlo anche per i JPanel.
    Evidentemente il JPanel che contiene la tua JTextArea non ha un layout manager ed è qui che c'è la "pecca"... non sto dicendo che sia sbagliato, solo che solitamente si lascia che sia un LayoutManager a gestire posizionamento e dimensionamento di componenti (per una serie di ragioni che non sto qui a spiegare).

    Ad ogni modo, se vuoi mantenere le cose così come stanno devi impostare un ComponentListener sul tuo JFrame:

    codice:
    // Nel costruttore del tuo JFrame
    addComponentListener( new MioComponentListener(this) );
    
    oppure, da un punto in cui il JFrame è raggiungibile
    tuoJFrame.addComponentListener( new MioComponentListener(tuoFrame) );
    Il ComponentListener va implementato (ComponentListener è un'interfaccia che prevede un po' di metodi... si può, comunque, ricorrere all'estensione di un ComponentAdapter, una classe che implementa l'interfaccia e tutti i suoi metodi vuoti... andando a ridefinire solo il metodo che ci interessa):

    codice:
    public class MioComponentListener extends ComponentAdapter {
       private TuoFrame tuoFrame;
       public MioComponentListener(TuoFrame frame) {
          this.tuoFrame = frame;
       }
    
       @Override
       public void componentResized(ComponentEvent ce) {
          // Qui vengono notificati i ridimensionamenti del tuo frame
          tuoFrame.ridimensionaTextArea();
       }
    }
    Ovviamente, dovrai creare un metodo che io ho chiamato "ridimensionaTextArea" pubblico nella tua classe che estende JFrame (che io ho chiamato TuoFrame). Lì dentro effettuerai il ridimensionamento della tua JTextArea in base alle nuove dimensioni del JFrame.

    Il mio consiglio, comunque, rimane valido a maggior ragione se sei agli inizi con le GUI: impara ad usare bene i LayoutManager; puoi partire dal Tutorial sui LayoutManager


    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    vabbe ma i JPanel di default hanno già il flow layout, comunque lo sapevo di poter settare tutti i layout anche per i panel... una domanda: potrei implementare direttamente ComponentAdapter dalla classe della mia frame?
    Mi spiego meglio: io di solito quando creo una classe finestra implemento ActionListener, faccio l'ovveride nella classe stessa del metodo actionPerformed e ai componenti che ho nell'interfaccia aggancio il listener this(esempioBottone.addActionListener(this)), invece di crearmi una classe a parte... quindi si può fare anche in questo caso una cosa del genere?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.