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

    azioni da associare ai tasti standard di jframe

    Salve a tutti.

    Ho un problema legato alle dimensioni del mio JFrame.

    praticamente sto creando un interfaccia con dimensioni "liquide", ovvero i componenti hanno dimensione in base alla risoluzione dello schermo.

    Il codice che utilizzo è questo


    codice:
            larghezzaFrame = (int) (dimensioniSchermo.getWidth());
            altezzaFrame = (int) (dimensioniSchermo.getHeight());
            framePrincipale.setSize(larghezzaFrame, altezzaFrame);
            
            framePrincipale.setExtendedState(MAXIMIZED_BOTH);
            //framePrincipale.setDefaultLookAndFeelDecorated(false);
            framePrincipale.setMinimumSize(new Dimension(larghezzaFrame, altezzaFrame));
            //framePrincipale.setResizable(false);
    ci sono essenzialmente 3 problemi in questo.

    1) il frame parte esteso a tutto schermo e mi sta bene, ma se ridimensiono con l'apposito tasto - [] X "quadrato" standard del jframe le dimensioni non tengono conto dell'altezza della barra di windows.

    2)Se disabilito il tasto con setResizable(false) praticamente mi si apre il programma a schermo intero e non posso neanche vedere la barra applicazioni di windows.

    3)Se ho il tasto di ridimensionamento attivato quando rimpicciolisco la finestra la dimensione dei componenti non muta ed ho bisogno di fare un validate(); Dove devo inserirlo?

    Vorrei trovare qualcosa che mi permetta di modificare le funzioni associate al tasto di ridimensionamento o comunque trovare una soluzione, qualche metodo già pronto, che mi risolva questo problema.

    Sapreste aiutarmi? Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Se vuoi che i tuoi componenti si adattino, hai 2 strade:

    1) Utilizzare dei JPanel con un Layout (dipende quello che ti interessa);
    2) Posizionarli tu, ma aggiornare le dimensioni ogni qual volta viene ridimensionata la finestra;

    il validate() o il rapaint(), vanno fatti sul JPanel. In casi più "estremi" puoi anche pensare ad un pack() sul JFrame... ma io ho sempre risolto tutto (o quasi se none erro) con un validate() e/o un repaint() sul pannello.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    si grazie patrick, io utilizzo già un layout di tipo gridbaglayout.

    il problema è dove inserisco il validate o repaint? io ne ho bisogno ogni qual volta clicco il tasto di ridimensionamento della finestra. come associo a quel tasto uno di questi 2 metodi?

    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Potresti inserirlo all'interno del metodo che riceve l'evento. Un modo (o forse l'unico?) per sapere quando una finestra viene rimpicciolita (tramite l'apposito pulsante) è l'implementazione dell'interfaccia WindowStateListener:

    http://docs.oracle.com/javase/7/docs...eListener.html


    Un modo più intricato che mi viene alla mente ora è quello di utilizzare un Osservatore sul JFrame e controlli (in un thread a parte) le dimensioni della finestra, e quando vede una modifica notifica l'accaduto... non so quanto possa essere dispendioso un controllo di questo tipo in un thread comunque. Per quanto riguarda gli osservatori devi utilizzare Observer ed Observable (interfaccia).

    Comunque se non hai esigenze particolari la prima di risparmia molto lavoro... non ne ho mai avuto necessità, quindi non so dirti precisamente che esce fuori adottando il secondo caso; se questa sera ho tempo ci provo

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Come non detto! Problema risolto. Nulla di quanto avevo prospettato sopra, mi ero scordato di ComponentListener e dei metodi che mette a disposizione.

    Ecco 2 righe di esempio che ho appena scritto:

    codice:
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
    
    class Finestra extends JFrame {
      private int count;
      
      Finestra() {
        addComponentListener(new ComponentAdapter() {
    	  public void componentResized(ComponentEvent ce) {
    	    System.out.println("JFrame Resized: "+(count++));
    	  }
    	  
    	});
    	
    	
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
      
      
      public static void makeGUI() {
        Finestra f = new Finestra();
    	f.setSize(500,500);
    	f.setVisible(true);
      }
      
      public static void main(String[] args) {
        try {
    	  SwingUtilities.invokeAndWait(new Runnable() {
    	    public void run() {
    		  makeGUI();
    		}
    	  });
    	} catch(Exception e) {}
      }
    }
    La variabile intera è appunto per mostrarti che ad ogni ridimensionamento viene invocato il metodo.

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.